# -*- Mode: shell-script -*-
#############################################################################
##
#A  cryst.grp                   GAP group library              Volkmar Felsch
##
##
#Y  Copyright (C) 2018-2021, Carnegie Mellon University
#Y  All rights reserved.  See LICENSE for details.
#Y  
#Y  This work is based on GAP version 3, with some files from version 4.  GAP is
#Y  Copyright (C) (1987--2021) by the GAP Group (www.gap-system.org).
##
##  This file contains functions  that allow to access most of the data which
##  are listed  in the tables  of the book  "Crystallographic groups of four-
##  dimensional space"  by Harold Brown, Rolf Buelow, Joachim Neubueser, Hans
##  Wondratschek, and Hans Zassenhaus (Wiley, New York, 1978).
##
##
##  For each  of the dimensions  2,  3,  and  4,  the tables  of the book are
##  arranged in the following hierarchical format:
##        dimension,
##          crystal family,
##            crystal system,
##              Q-class (geometric crystal class),
##                Z-class (arithmetic crystal class),
##                  space-group type.
##
##  The following conventions for  local variables are used throughout in all
##  functions of this library.
##
##  dim = dimension,
##  sys = crystal system number with respect to a given dimension,
##  qcl = Q-class number  with respect to given dimension and crystal system,
##  zcl = Z-class number with respect to given dimension, crystal system, and
##        Q-class,
##  sgt = space-group type  with respect to given dimension,  crystal system,
##        Q-class, and Z-class,
##  q   = Q-class number  with respect to the  list of all  Q-classes  of the
##        current dimension,
##  z   = Z-class number  with respect to the  list of all  Z-classes  of the
##        current dimension,
##  t   = space-group type  with respect to the list of all space-group types
##        of the current dimension,
##  CR  = catalogue   record   CrystGroupsCatalogue[dim]   for  the   current
##        dimension dim.
##
##  For most of the  functions in this library  there are two versions given,
##  a public version and an internal version  which are distinguished  by the
##  prefix  "CR_"  in the  name  of the  internal version  and  by  different
##  parameter lists.  The reason  for that distinction is  that in the public
##  functions  the  arguments  are  checked  for being  in range  whereas  no
##  argument checking is done in the internal functions.
##
##


#############################################################################
##
#F  GLZOps( <dim>, <system>, <qclass> )  . . . . . . . operations for GL(n,Z)
##
##  'GLZOps'
##
GLZOps := Copy( MatGroupOps );


#############################################################################
##
#F  GLZOps.\in( <obj>, <G> )  . . . . . . . . . . membership test for GL(n,Z)
##
GLZOps.\in := function( g, G )
    return IsMat( g )
        and Length( g ) = Length( G.generators[1] )
        and ForAll( Flat( g ), IsInt )
        and AbsInt( DeterminantMat( g ) ) = 1;
end;


#############################################################################
##
#F  GLZOps.Normalizer( <G>, <H> )  . . . . . . . . . .  normalizer in GL(n,Z)
##
GLZOps.Normalizer := function ( G, H )
    local con, N, param;
    if IsBound( H.crZClass ) then
        param := H.crZClass;
        N := CR_NormalizerZClass( param );
        if IsBound( H.crConjugator and H.crConjugator <> H.identity ) then
            con := H.crConjugator;
            N.generators := con^-1 * N.generators * con;
            if IsBound( N.crConjugator ) then
                con := N.crConjugator * con;
            fi;
            N.crConjugator := con;
        fi;
        return N;
    fi;
    return MatGroupOps.Normalizer( G, H );
end;


#############################################################################
##
##  GLZ2  . . . . . . . . . . . . . . . . . . .  general linear group GL(2,Z)
##
GLZ2 := Group(
  [ [0,1], [1,0] ],
  [ [1,0], [1,1], ],
  [ [-1,0], [0,1], ] );
GLZ2.operations := GLZOps;
GLZ2.name := "GLZ2";
GLZ2.size := "infinity";


#############################################################################
##
##  GLZ3  . . . . . . . . . . . . . . . . . . .  general linear group GL(3,Z)
##
GLZ3 := Group(
  [ [0,1,0], [0,0,1], [1,0,0] ],
  [ [1,0,0], [1,1,0], [0,0,1] ],
  [ [-1,0,0], [0,1,0], [0,0,1] ] );
GLZ3.operations := GLZOps;
GLZ3.name := "GLZ3";
GLZ3.size := "infinity";


#############################################################################
##
##  GLZ4  . . . . . . . . . . . . . . . . . . .  general linear group GL(4,Z)
##
GLZ4 := Group(
  [ [0,1,0,0], [0,0,1,0], [0,0,0,1], [1,0,0,0] ],
  [ [1,0,0,0], [1,1,0,0], [0,0,1,0], [0,0,0,1] ],
  [ [-1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1] ] );
GLZ4.operations := GLZOps;
GLZ4.name := "GLZ4";
GLZ4.size := "infinity";


#############################################################################
##
#F  CrystalGroupsCatalogue  . . . . . . . . . . . . . . . . . . . . . . . . .
##
##  The data  listed  in this  catalogue  are essentially  the same  as those
##  listed  in the  tables of  the book  "Crystallographic  groups  of  four-
##  dimensional space"  by Harold Brown, Rolf Buelow, Joachim Neubueser, Hans
##  Wondratschek, and  Hans Zassenhaus (Wiley, New York, 1978).
##
##  For each of the  dimensions 2, 3, and 4  the catalogue  contains a record
##  'CR', say, which consists of the folowing components.
##
##  'CR.bZClass'  is a Boolean list containing the numbers of those Z-classes
##      which are Bravais Z-classes.
##
##  'CR.codedConjugatorDadeGroup'  is a list  of matrices  used to  conjugate
##      Z-class representative groups  into subgroups  of Dade groups.  Each
##      entry is  of the form  p1 + 140 * p2 + 140^2 * p3 + ... + 140^(dim-1)
##      * p_dim,  where  dim  is  the  given  dimension,  and  the  pi's  are
##      pointers  to the  list 'CR.rowConjugatorDadeGroup'.  (It is addressed
##      by   pointers   which  are   contained   in  entries   of  the   list
##      'CR.codedDadeGroupsZClass'.)
##
##  'CR.codedDadeGroupsZClass'  is a list  which for each Z-class contains in
##      form of a  sublist  of consecutive entries  representatives  of those
##      conjugacy classes  of subgroups  of Dade groups  which contain groups
##      from that Z-class. Each entry is of the form d  or  p * 10 + d, where
##      d  is the  number  of a Dade group  and  p  is a pointer  to the list
##      'CR.codedConjugatorDadeGroup'.         (See         also         list
##      'CR.nullDadeGroupsZClass'.)
##
##  'CR.codedDecompositionQClass'  is a list  which for each Q-class contains
##      an entry of the form t1  or of the form  10 * t2 + t1,  where t1 is a
##      pointer to the text string list 'CR_TextStrings.QClass'  and  t2 is a
##      pointer to the text string list 'CR_TextStrings.QConstituents'.
##
##  'CR.codedGeneratorsSpaceGroup'  is a list which for each space-group type
##      that is not the  representative of its Z-Class  contains an  entry of
##      the form p1 + m * p2 + m^2 * p3 + ... + m^(n-1) * pn,  where m equals
##      'CR.modulSp',  and  n  is the  number  of the  given  non-translation
##      generators of the space group,  and the pi's are pointers to the list
##      'CR.columnGeneratorSpaceGroup'.
##
##  'CR.codedGeneratorZClass' is a list which for each Z-class representative
##      matrix group  contains  its  generators  in  form  of  a  sublist  of
##      consecutive entries. Each entry is of the form p1 + m * p2 + m^2 * p3
##      + ... + m^(dim-1) * p_dim,  where m equals 'CR.modulZ',  and  dim  is
##      the  given  dimension,   and  the  pi's  are  pointers  to  the  list
##      'CR.rowGeneratorZClass'.  (See also  list 'CR.nullGeneratorsZClass'.)
##
##  'CR.codedIsomorphismTypeQClass' provides for each Q-class an entry of the
##      form  100 * t + p,  where  t  is the  isomorphism type number  of the
##      respective representative group  (with respect  to all  groups of the
##      same order),  and  p  is either zero  or a pointer to the text string
##      list 'CR_TextStrings.isomorphismType'.
##
##  'CR.codedNormalizerZClass' provides for each Z-class an entry of the form
##      1000 * n2 + n1,  where each of  n1 and n2 is either zero or a pointer
##      to the list  'CR.GeneratorsZClass'.  Let us  abbreviate  that list by
##      "gens". Then the normalizer of the representative matrix group of the
##      given Z-class can be computed  from n1 and n2 as follows.  If n1 = 0,
##      then  the  normalizer  is  one  of  the  Z-class represenative matrix
##      groups,  and n2 is a pointer to its generators.  If n2 = 0,  then the
##      normalizer  is infinite  and will be  generated  by the  given  group
##      together with  the list  of generators  to which n1 points.  If both,
##      n1 and n2,  are non-zero,  then  n1  point to the  generators of some
##      Z-class representative  which  has  to  be  conjugated  by the  first
##      matrix in the lisin pointed to by nin in order to get the normalizer.
##
##  'CR.codedPresentationQClass'  provides  for each Q-class  an entry of the
##      form  10 * p + n,  where  n  is  the  number  of  generators  of  the
##      representative group of the given Q-class,  and p is a pointer to the
##      corresponding list of relators in 'CR.relatorNumbersQClass'.
##
##  'CR.codedPropertiesFamily'  provides for each crystal family  an entry of
##      the form  1000 * f + 100 * b + 10 * q + r,  where  f is the number of
##      free parameters,  b  is the number of Bravais systems  in the family,
##      and  q  and  r  are pointers to appropriate text strings  in the list
##      'CR_TextStrings.family'  which  describe the  rational  and the  real
##      decomposition pattern, respectively.
##
##  'CR.codedPropertiesZClass' provides for each Z-class an entry of the form
##      100 * c + 10 * b + d,   where  c  is  the  order  of  the  associated
##      cohomology group,  b  is the Bravais type  of the given Z-class,  and
##      d  is a pointer to a text string  in the list 'CR_TextStrings.ZClass'
##      which describes the decomposition pattern.
##
##  'CR.columnGeneratorSpaceGroup'  is a list of all different columns  which
##      occur  as last column  in at least one of the  space group generators
##      listed in the catalogue.  Note that each column in the list  has been
##      multiplied by the common denominator of its entries.
##
##  'CR.crystalSystemQClass'  provides  for each  Q-class  the  number of the
##      crystal system to which it belongs.
##
##  'CR.dimension' is the given dimension, i.e. 2, 3, or 4.
##
##  'CR.familyCrystalSystem'  provides for each crystal system  the family to
##      which it belongs.
##
##  'CR.fixedPointFreeSpaceGroup'   is  a   Boolean  list   containing  those
##      space-group  types  for which  the  corresponding  space  groups  are
##      fixed-point-free.
##
##  'CR.GLZ is the group GL(dim,Z), where dim is the given dimension.
##
##  'CR.HermannMauguinSymbol'  is a list of the Hermann-Mauguin associated to
##      the  given dimension  in the order  in which  they are listed  in the
##      International Tables. (Only for dimensions 2 or 3.)
##
##  'CR.hQClass'  is a Boolean list containing the numbers of those Q-classes
##      which are holohedries.
##
##  'CR.internatTableSpaceGroupType'  provides for each space-group  type its
##      number in the International Tables. If a space-group type splits into
##      an  enantiomorphic pair,  then the  corresponding entry  of the  list
##      contains  both  numbers  in  the  form  1000 * it1 + it2.  (Only  for
##      dimension 3.)
##
##  'CR.modulSp'  is an integer  used to pack and unpack  the entries of list
##      CR.codedGeneratorsSpaceGroup.
##
##  'CR.modulZ  is an integer  used to  pack and unpack  the entries  of list
##      CR.codedGeneratorZClass.
##
##  'CR.nameCrystalFamily'  provides for each crystal family its family name.
##
##  'CR.nullDadeGroupsZClass'  contains  for each Z-class  a pointer p to the
##      list 'CR.codedDadeGroupsZClass'  such that,  for some n,  the entries
##      p + 1  to  p + n  of  that  list  provide  representatives  of  those
##      conjugacy classes  of subgroups  of Dade groups  which contain groups
##      from the  respective Z-class.  The last entry points just to the last
##      generator in the list.
##
##  'CR.nullGeneratorsZClass'  contains  for each Z-class  a pointer p to the
##      list  'CR.codedGeneratorZClass'  such that,  for some n,  the entries
##      p + 1  to   p + n   of  that  list  provide  the  generators  of  the
##      representative  matrix group  of the  respective Z-class.  Additional
##      entries point  to sublists  which  represent  generators of  infinite
##      normalizers or conjugating elements which are used to compute certain
##      finite normalizers.  The last entry points just to the last generator
##      in the list.
##
##  'CR.nullQClass'  provides for each crystal system the number of Q-classes
##      in the  preceding  crystal systems.  An  additional  entry  gives the
##      number of all Q-classes.
##
##  'CR.nullSpaceGroup'  provides for each Z-class  the number of space-group
##      types  in the  preceding Z-classes.  An  additional entry  gives  the
##      number of all space-group types.
##
##  'CR.nullZClass'  provides for each Q-class the number of Z-classes in the
##      preceding  Q-classes.  An additional entry  gives  the number  of all
##      Z-classes.
##
##  'CR.orbitLengthSpaceGroup'  provides for each space-group type  which is
##      not the Z-class representative  the orbit length associated with that
##      space-group type.
##
##  'CR.orderQClass'  provides for each Q-class  the order  of the  groups in
##      that Q-class.
##
##  'CR.parametersDadeGroup' is a list which for each Dade group of the given
##      dimension contains its parameter list [ dim, sys, qcl, zcl ].
##
##  'CR.QClassZClass'  provides for each Z-class the number of the Q-class to
##      which it belongs.
##
##  'CR.relatorNumbersQClass'  is a list  of  lists  of  relators,  where the
##      relators  in the  lists  are  represented  by  pointers  to the  list
##      'CR.relatorWordsQClass'.
##
##  'CR.rowConjugatorDadeGroup'  is a list of all different rows  which occur
##      in the matrices  which are used  to conjugate  Z-class representative
##      groups  into subgroups  of Dade groups.  (It is addressed by pointers
##      which     are     contained     in     entries     of    the     list
##      'CR.codedConjugatorDadeGroup'.)
##
##  'CR.rowGeneratorZClass'  is a list of  all different rows  which occur in
##      the matrices  which are used to  generate the  Z-class representative
##      groups.  (It is addressed by pointers  which are contained in entries
##      of the lists 'CR.nullGeneratorsZClass' and 'CR.codedGeneratorZClass'.
##
##  'CR.spaceGroupIdentity'  is the  identity matrix  of the associated space
##      groups.
##
##  'CR.spaceGroupTypeInternatTable'   provides for each  International Table
##      number  the corresponding  "global parameters"  z und t (cf. function
##      'CR_Parameters') in the form 100 * t + z.  (Only for dimensions 2 and
##      3.)
##
##  'CR.splittingQClass'  is a Boolean list  containing the  numbers of those
##      Q-classes which split into enantiomorphic pairs.  (Only for dimension
##      4.)
##
##  'CR.splittingSpaceGroupType'   is  a   Boolean  list   containing   those
##      space-group types  which split into  enantiomorphic pairs.  (Only for
##      dimensions 3 and 4.)
##
##  'CR.splittingZClass'  is a Boolean list  containing the numbers  of those
##      Z-classes which split into enantiomorphic pairs.  (Only for dimension
##      4.)
##
##  'CR_TextStrings.roman' is a list of the 23 smallest non-negative integers
##      expressed by Roman numerals.
##

CR_TextStrings := rec( );
CR_2 := rec( );
CR_3 := rec( );
CR_4 := rec( );

CrystGroupsCatalogue := [ CR_TextStrings, CR_2, CR_3, CR_4 ];

CR_TextStrings.crystalSystem :=
  ["#I  Crystal system "," Q-class"," Q-classes","; holohedry (",",",": ",
  ")"];

CR_TextStrings.family :=
  ["irreducible","decomposition pattern ","1+1","1+1+1","1+1+1+1",
  "1+1+2","1+2","1+3","2+2","Q-","R-","#I Family ",": ","; ","s",
  " free parameter"," crystal system"," Bravais flock",";\n#I  "];

CR_TextStrings.isomorphismType :=
  ["C1","C2","C3","C2xC2","C4","C5","C6","D6","C2xC2xC2","C4xC2",
  "C8","D8","Q8","C3xC3","C10","D10","C6xC2","C12","D12","Q12",
  "A4","C2xC2xC2xC2","C4xC2xC2","C4xC4","D8xC2","<2,2,2>2","(4,4/2,2)",
  "<2,2/4;2>","<2,2/2>","D16","<-2,4/2>","C6xC3","D6xC3","D(C3xC3)",
  "D10xC2","C6xC2xC2","C12xC2","D8xC3","Q8xC3","D12xC2","D6xC4",
  "Q12xC2","<-2,2,3>","A4xC2","(4,6/2,2)","D24","<2,3,3>","S4",
  "D8xC2xC2","D8xC4","C4^S2","(C2xC2)^S2","D(C4xC4)","C6xC6","D6xC6",
  "Q12xC3","D(C3xC3)xC2","D6xD6","(3,4,4;3)","D8xC6","D12xC2xC2",
  "D12xC4","A4xC2xC2","(4,6/2,2)xC2","D24xC2","S4xC2","D8xD6","A5",
  "D8xD8","D12xC6","D(C6xC6)","(4,6/2,2)xC3","<2,3,3>xC3","D12xD6",
  "(3,4,4;3)xC2","D6^S2","S4xC2xC2","D12xD8","S5","A5xC2","(D6^S2)xC2",
  "D12xD12","S5xC2","D12^S2","C2^S4","[3,4,3]"];

CR_TextStrings.QClass :=
  ["Q-constituents ","Q-irreducible; ","R-irreducible; ","C-irreducible; ",
  "; cc; ","; ncc; ","#I   Q-class ","#I  *Q-class ","): size ",
  "; isomorphism type "," Z-class"," Z-classes"," space group",
  " space grps",",","(",".","H ","; "," = ",";\n#I    "];

CR_TextStrings.QConstituents :=
  ["(2,1,1)+(2,1,2)","(4,1,1)+(4,1,2)+(4,3,1)","(4,1,1)+(4,1,2)+(4,3,2)",
  "(4,1,1)+(4,1,2)+(4,4,1)","(4,1,1)+(4,1,2)+(4,4,2)",
  "(4,1,1)+(4,1,2)+(4,4,3)","(4,1,1)+(4,1,2)+(4,4,4)","(3,1,1)+2*(3,1,2)",
  "(4,1,1)+3*(4,1,2)","(3,1,1)+(3,3,1)","(3,1,1)+(3,3,2)","(3,1,1)+(3,4,1)",
  "(3,1,1)+(3,4,2)","(3,1,1)+(3,4,3)","(3,1,1)+(3,4,4)","(4,1,1)+(4,7,1)",
  "(4,1,1)+(4,7,2)","(4,1,1)+(4,7,3)","(4,1,1)+(4,7,4)","(4,1,1)+(4,7,5)",
  "(3,1,2)+(3,3,1)","(3,1,2)+(3,3,2)","(3,1,2)+(3,4,1)","(3,1,2)+(3,4,2)",
  "(3,1,2)+(3,4,3)","(3,1,2)+(3,4,4)","(4,1,2)+(4,7,1)","(4,1,2)+(4,7,2)",
  "(4,1,2)+(4,7,3)","(4,1,2)+(4,7,4)","(4,1,2)+(4,7,5)","2*(2,1,1)",
  "2*(3,1,1)+(3,1,2)","2*(4,1,1)+2*(4,1,2)","2*(4,1,1)+(4,3,1)",
  "2*(4,1,1)+(4,3,2)","2*(4,1,1)+(4,4,1)","2*(4,1,1)+(4,4,2)",
  "2*(4,1,1)+(4,4,3)","2*(4,1,1)+(4,4,4)","2*(2,1,2)","2*(4,1,2)+(4,3,1)",
  "2*(4,1,2)+(4,3,2)","2*(4,1,2)+(4,4,1)","2*(4,1,2)+(4,4,2)",
  "2*(4,1,2)+(4,4,3)","2*(4,1,2)+(4,4,4)","2*(4,3,1)","2*(4,3,2)",
  "2*(4,4,1)","2*(4,4,2)","2*(4,4,3)","2*(4,4,4)","3*(3,1,1)",
  "3*(4,1,1)+(4,1,2)","3*(3,1,2)","(4,3,1)+(4,3,2)","(4,3,1)+(4,4,1)",
  "(4,3,1)+(4,4,2)","(4,3,1)+(4,4,3)","(4,3,1)+(4,4,4)","(4,3,2)+(4,4,1)",
  "(4,3,2)+(4,4,2)","(4,3,2)+(4,4,3)","(4,3,2)+(4,4,4)","4*(4,1,1)",
  "4*(4,1,2)","(4,4,1)+(4,4,2)","(4,4,1)+(4,4,3)","(4,4,1)+(4,4,4)",
  "(4,4,2)+(4,4,3)","(4,4,2)+(4,4,4)","(4,4,3)+(4,4,4)"];

CR_TextStrings.spaceGroup :=
  ["#I     Space-group type ","#I    *Space-group type ","; IT(",
  "; fp-free","orbit size ","(",",",") = ",", IT(","; ",";\n#I      ",
  ")","#I  The non-translation generators of "," are\n\n"];

CR_TextStrings.ZClass :=
  ["; Z-irreducible","; Z-reducible","; Z-decomposable",
  "; fully Z-reducible","#I    Z-class ","#I   *Z-class ",
  ": Bravais type "," space group"," space groups",
  "; cohomology group size "," = Z(",")",",","(","B ","/",";\n#I     "];

CR_TextStrings.roman :=
  ["I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII","XIII",
  "XIV","XV","XVI","XVII","XVIII","XIX","XX","XXI","XXII","XXIII"];

CR_2.bZClass := BlistList( [1..13], [2,5,6,8,13] );

CR_2.codedConjugatorDadeGroup := [142,421,563];

CR_2.codedDadeGroupsZClass := [2,1,2,1,21,12,32,21,1,12,1,1,1,2,2,2,2,2];

CR_2.codedDecompositionQClass := [325,415,16,416,3,4,3,4,3,4];

CR_2.codedGeneratorsSpaceGroup := [2,1,3,3];

CR_2.codedGeneratorZClass :=
  [16,6,10,26,10,6,26,6,25,6,10,25,6,19,1,19,26,19,6,19,26,6,19,10,2,17];

CR_2.codedIsomorphismTypeQClass := [101,102,102,104,205,412,103,208,107,319];

CR_2.codedNormalizerZClass := [14000,14000,5,6,8,8,8,8,13,13,13,13,13];

CR_2.codedPresentationQClass := [11,21,21,202,212,243,401,462,452,433];

CR_2.codedPropertiesFamily := [3133,2233,1101,1101];

CR_2.codedPropertiesZClass :=
  [114,114,214,122,414,122,111,211,111,111,111,111,111];

CR_2.columnGeneratorSpaceGroup := [[0,0,1],[0,1,2],[1,0,2],[1,1,2]];

CR_2.crystalSystemQClass := [1,1,2,2,3,3,4,4,4,4];

CR_2.dimension := 2;

CR_2.familyCrystalSystem := [1..4];

CR_2.fixedPointFreeSpaceGroup := BlistList( [1..17], [1,4] );

CR_2.GLZ := GLZ2;

CR_2.HermannMauguinSymbol :=
  ["p1","p2","pm","pg","cm","p2mm","p2mg","p2gg","c2mm","p4","p4mm",
  "p4gm","p3","p3m1","p31m","p6","p6mm"];

CR_2.hQClass := BlistList( [1..10], [2,4,6,10] );

CR_2.modulSp := 4;

CR_2.modulZ := 6;

CR_2.nameCrystalFamily := ["oblique","rectangular","square","hexagonal"];

CR_2.nullDadeGroupsZClass := [0,2,4,5,8,9,11,12,13,14,15,16,17,18];

CR_2.nullGeneratorsZClass := [0,1,2,3,4,6,8,10,13,14,16,18,20,23,26];

CR_2.nullQClass := [0,2,4,6,10];

CR_2.nullSpaceGroup := [0,1,2,4,5,8,9,10,12,13,14,15,16,17];

CR_2.nullZClass := [0,1,2,4,6,7,8,9,11,12,13];

CR_2.orbitLengthSpaceGroup := [1,2,1,1];

CR_2.orderQClass := [1,2,2,4,4,8,3,6,6,12];

CR_2.parametersDadeGroup := [[2,3,2,1,0],[2,4,4,1,0]];

CR_2.QClassZClass := [1,2,3,3,4,4,5,6,7,8,8,9,10];

CR_2.relatorNumbersQClass :=
  [[1], [2], [2,10,22,28,40,61,92,129,163,198],
  [2,10,22,31,34,40,61,92,116,129,166,186,199,228,247],
  [2,10,22,31,40,61,92,129,174,202], [2,10,22,40,61,129],
  [2,10,24,28,34,40,62,92,116,142,168,186,201,227,249],
  [2,10,24,28,40,62,92,142,163,198], [2,10,24,28,40,62,92,142,168,201],
  [2,10,24,28,40,62,92,142,168,214],
  [2,10,24,30,40,78,80,100,106,108,109,130,153,175,176,177,179,210,217,219,
  220],
  [2,10,24,33,40,78,80,100,107,108,110,111,112,113,114,115,130,153,175,176,
  178,180,181,182,183,184,185,211,218,219,221,222,223,224,225,226],
  [2,10,24,40,62,142], [2,10,26,28,40,62,104,142,163,209],
  [2,10,26,28,40,78,92,130,168,209], [2,10,26,28,40,78,92,130,168,216],
  [2,10,26,28,40,78,93,130,164,216], [2,10,26,40,62,142],
  [2,10,26,40,78,130], [2,10,40], [2,11,40],
  [2,11,22,28,40,61,92,142,163,198], [2,11,22,40,61,129],
  [2,11,22,40,61,142],
  [2,17,22,28,35,38,40,61,105,117,125,147,172,189,195,198,230,237,244,250,
  256],
  [2,17,22,28,36,37,40,61,105,120,124,147,172,190,194,198,231,236,241,251,
  259],
  [2,17,22,28,36,40,61,105,118,147,172,191,198,233,243],
  [2,17,22,32,34,40,79,99,116,129,172,192,205,228,248],
  [2,17,22,32,35,37,39,40,79,96,122,123,128,147,167,186,196,197,205,234,239,
  240,245,252,255,260,261,262],
  [2,17,22,32,35,37,40,79,96,122,123,147,167,186,196,205,234,239,245,252,
  260],
  [2,17,22,32,35,40,79,98,121,147,165,188,212,232,246],
  [2,17,22,32,40,79,95,129,172,199], [2,17,25,28,40,79,92,133,168,215],
  [2,17,25,40,79,133], [2,17,26,28,40,61,92,147,163,216],
  [2,19,26,28,40,61,92,136,173,216], [2,19,26,28,40,61,92,148,173,216],
  [2,19,26,40,61,136], [2,19,26,40,61,148], [3],
  [3,10,22,28,40,73,92,129,163,198], [3,10,22,40,61,129],
  [3,10,22,40,73,129], [3,10,22,41,61,129], [3,10,40], [3,10,41],
  [3,16,22,40,73,146], [3,16,25,28,40,66,101,143,169,215],
  [3,16,25,40,79,131], [3,16,40], [3,19,22,41,61,148], [3,19,22,41,73,137],
  [3,19,25,28,40,79,101,137,168,207], [3,19,25,28,40,79,105,137,173,215],
  [3,19,25,40,79,137], [3,19,41], [3,21,22,41,61,149], [3,21,22,41,73,136],
  [3,21,41], [4],
  [4,10,22,28,35,37,40,74,102,119,126,129,169,187,193,198,229,238,242,253,
  257],
  [4,10,22,28,35,37,40,74,102,119,127,129,169,187,193,198,229,235,242,254,
  258],
  [4,10,22,28,35,40,74,102,119,129,169,187,198,229,242],
  [4,10,22,28,40,63,102,129,163,200], [4,10,22,28,40,74,92,129,163,198],
  [4,10,22,28,40,74,102,129,169,198], [4,10,22,40,61,129],
  [4,10,22,40,63,129], [4,10,22,40,74,129], [4,10,22,40,74,143],
  [4,10,22,40,78,129], [4,10,22,42,61,129], [4,10,40], [4,10,42],
  [4,12,24,28,42,63,102,130,170,202], [4,12,24,28,42,78,102,132,168,214],
  [4,12,24,29,42,63,92,130,168,203], [4,12,24,42,63,130],
  [4,12,24,42,78,132], [4,12,27,28,42,62,102,144,170,208],
  [4,12,27,42,63,132], [4,12,42], [4,17,22,28,40,79,102,147,172,213],
  [4,17,22,40,67,129], [4,17,22,40,74,147], [4,17,22,42,74,147],
  [4,17,25,28,40,62,102,132,163,206], [4,17,25,40,67,144], [4,17,40],
  [4,17,42], [4,18,26,48,50,52,54,71,82,84,87,89,139,150,154,157,160],
  [4,18,26,48,50,52,54,72,81,85,86,90,140,151,156,159,161],
  [4,20,26,49,51,53,55,56,57,58,59,60,70,83,84,88,91,141,152,155,158,162],
  [5], [5,10,43], [5,17,42], [6], [6,10,22,28,44,61,92,129,163,198],
  [6,10,22,40,61,129], [6,10,22,40,62,132], [6,10,22,40,64,129],
  [6,10,22,40,75,129], [6,10,22,40,75,144], [6,10,22,44,61,129],
  [6,10,22,44,75,145], [6,10,40], [6,10,44], [6,13,44], [6,16,22,40,75,146],
  [6,16,40], [6,17,22,44,75,134], [6,17,44], [6,19,22,40,75,148],
  [6,19,22,44,61,148], [6,19,22,44,75,137], [6,19,22,44,75,148],
  [6,19,25,28,40,69,92,138,173,215], [6,19,25,40,68,135], [6,19,40],
  [6,19,44], [7], [7,10,22,28,44,64,97,129,163,212],
  [7,10,22,28,44,76,94,129,163,212], [7,10,22,44,64,129],
  [7,10,22,44,65,145], [7,10,22,44,76,129], [7,10,42], [7,10,44], [7,10,45],
  [8], [8,10,46], [8,17,42], [9], [9,10,22,40,76,129], [9,10,22,40,77,129],
  [9,10,22,44,61,129], [9,10,22,44,76,129], [9,10,22,44,77,145],
  [9,10,23,47,76,144], [9,10,40], [9,10,44], [9,10,45], [9,10,47],
  [9,14,24,28,45,65,103,132,171,204], [9,14,24,45,65,132], [9,14,45],
  [9,15,44]];

CR_2.rowConjugatorDadeGroup := [[0,-1],[1,-1],[1,0],[1,1]];

CR_2.rowGeneratorZClass := [[-1,0],[0,-1],[0,1],[1,-1],[1,0],[1,1]];

CR_2.spaceGroupIdentity :=
  [[1,0,0],[0,1,0],[0,0,1]];

CR_2.spaceGroupTypeInternatTable :=
  [101,202,303,403,504,605,705,805,906,1007,1108,1208,1309,1410,
  1511,1612,1713];

CR_3.bZClass :=
  BlistList( [1..73], [2,7,8,18,19,20,21,36,37,48,58,71,72,73] );

CR_3.codedConjugatorDadeGroup :=
  [79395,118877,176683,176831,177111,177382,177535,178513,178786,
  178792,196429,196575,217297,217709,256914,294149,296253,296396,
  334898];

CR_3.codedDadeGroupsZClass :=
  [1,2,3,4,1,2,3,4,141,142,191,51,142,123,23,144,134,141,42,
  31,81,42,93,13,174,74,141,142,191,81,142,93,123,174,134,2,
  61,2,3,184,13,4,2,61,2,51,61,142,143,184,104,113,13,144,
  2,61,2,3,184,13,4,2,13,144,2,13,144,2,13,144,142,13,144,
  2,13,144,142,2,13,144,13,144,142,13,144,42,163,154,1,42,
  163,154,1,42,163,154,1,1,42,163,154,1,1,42,163,154,1,1,1,
  1,1,1,1,1,1,1,2,3,4,2,3,4,2,3,4,2,3,4,2,3,4];

CR_3.codedDecompositionQClass :=
  [545,565,85,335,565,566,86,566,106,216,216,226,116,226,226,
  126,256,246,136,266,146,236,256,266,156,246,266,4,4,4,4,4];

CR_3.codedGeneratorsSpaceGroup :=
  [4,1,1,14,56,70,14,84,88,102,14,112,56,1,57,62,63,14,70,
  71,76,1,14,112,1,113,18,112,8,14,798,1666,1176,1190,1568,
  1582,1232,1246,1624,1638,112,126,1428,1442,14,196,1568,1582,
  1764,252,112,1568,1092,17,1,104,14,1624,1638,994,238,14,1656,
  1922,1670,994,14,1,15,1658,1672,1659,1673,8,994,1002,14,1656,
  1670,1,1658,1659,8,994,14,196,210,23212,23226,23408,23422,
  23184,23198,23380,23394,112,126,308,322,112,20090,20062,2,28,
  28,113,1,1,1582,14,14,28,1,29,14,392,14,406,1,14,15,1,14,
  14,196,210,1092,1092,23324,15288,3528,15288,30156,23436,23436,
  20194,23325,3536,20194,1582,326550,326648,126,49504,49406,282716];

CR_3.codedGeneratorZClass :=
  [3092,2624,2719,2570,2997,3164,2624,2719,2624,2570,2719,2985,
  2570,2985,5062,276,4433,2783,2997,2985,3164,2985,2931,2570,
  1071,276,1643,2783,2624,2719,2985,2624,2570,2985,2624,5062,276,
  2624,4433,2783,3159,2985,1625,2783,2575,2985,4451,2783,2624,
  3159,2985,2624,1625,2783,2719,3159,2985,4433,1625,2783,2997,
  3159,2985,1643,1625,2783,2719,2575,2985,2997,2575,2985,1643,
  4451,2783,4433,4451,2783,2624,2719,3159,2985,2624,4433,1625,
  2783,3884,3121,2624,3884,2624,3121,2570,3884,2570,3121,2803,
  3121,3164,3884,2931,3121,3164,3121,2624,2570,3884,2624,2570,
  3121,2624,2803,3121,2985,3121,2731,3121,2624,2985,3121,2803,
  2985,3121,2931,2985,3121,2931,2731,3121,2803,2731,3121,2624,
  2803,2985,3121,3884,2719,2985,3884,5062,276,3884,4433,2783,
  2624,3884,2719,2985,2624,3884,5062,276,2624,3884,4433,2783,
  2803,3884,2719,2985,6595,3884,5062,276,3005,3884,4433,2783,
  2931,3884,2719,2985,204,3884,5062,276,2711,3884,4433,2783,2624,
  2803,3884,2719,2985,2624,6595,3884,5062,276,2624,3005,3884,
  4433,2783,979,3080,3884,3095,5252,3093,920,824,2636,3884,3095,
  5980,3112,424,458,3093,824,2636,3093,5157,2985,2719,3112,458,
  2783,3112,6052,3005,2570];

CR_3.codedIsomorphismTypeQClass :=
  [101,102,102,102,104,104,104,109,205,205,210,412,412,412,625,
  103,107,208,208,319,107,107,117,319,319,319,640,521,1044,
  1548,1548,3666];

CR_3.codedNormalizerZClass :=
  [75000,77000,76000,78000,80000,82000,79000,81000,71,36,72,73,36,
  36,19,74037,37,71,36,72,73,36,37,36,37,36,37,36,37,36,37,36,36,
  37,37,36,37,48,58,48,58,48,58,58,48,58,58,48,58,58,58,58,58,58,
  58,58,58,58,71,72,73,71,72,73,71,72,73,71,72,73,71,72,73];

CR_3.codedPresentationQClass :=
  [11,21,21,21,202,202,202,63,212,212,233,243,243,243,224,401,
  452,462,462,443,452,452,423,433,433,433,414,133,84,94,94,75];

CR_3.codedPropertiesFamily := [6144,4244,3444,2277,2277,1301];

CR_3.codedPropertiesZClass :=
  [114,114,214,123,414,223,814,223,814,223,132,242,1614,423,423,
  232,442,6414,823,232,842,414,222,114,122,414,222,814,222,814,
  422,414,414,222,222,1614,422,112,324,112,124,112,324,324,212,
  224,224,212,224,224,624,124,224,624,424,224,224,424,211,121,
  231,411,221,231,411,221,231,211,221,231,411,421,231];

CR_3.columnGeneratorSpaceGroup :=
  [[0,0,0,1],[0,0,1,2],[0,0,1,3],[0,0,1,4],[0,1,0,2],[0,1,1,2],
  [1,0,0,2],[1,0,1,2],[1,1,0,2],[1,1,1,2],[1,1,2,4],[2,0,1,4],
  [3,1,0,4],[3,2,3,4]];

CR_3.crystalSystemQClass :=
  [1,1,2,2,2,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7];

CR_3.dimension := 3;

CR_3.familyCrystalSystem := [1,2,3,4,5,5,6];

CR_3.fixedPointFreeSpaceGroup :=
  BlistList( [1..219], [1,4,7,9,19,33,34,76,142,165] );

CR_3.GLZ := GLZ3;

CR_3.HermannMauguinSymbol :=
  ["P1","P-1","P2","P21","C2","Pm","Pc","Cm","Cc","P2/m","P21/m",
  "C2/m","P2/c","P21/c","C2/c","P222","P2221","P21212","P212121",
  "C2221","C222","F222","I222","I212121","Pmm2","Pmc21","Pcc2",
  "Pma2","Pca21","Pnc2","Pmn21","Pba2","Pna21","Pnn2","Cmm2","Cmc21",
  "Ccc2","Amm2","Abm2","Ama2","Aba2","Fmm2","Fdd2","Imm2","Iba2",
  "Ima2","Pmmm","Pnnn","Pccm","Pban","Pmma","Pnna","Pmna","Pcca",
  "Pbam","Pccn","Pbcm","Pnnm","Pmmn","Pbcn","Pbca","Pnma","Cmcm",
  "Cmca","Cmmm","Cccm","Cmma","Ccca","Fmmm","Fddd","Immm","Ibam",
  "Ibca","Imma","P4","P41","P42","P43","I4","I41","P-4","I-4",
  "P4/m","P42/m","P4/n","P42/n","I4/m","I41/a","P422","P4212",
  "P4122","P41212","P4222","P42212","P4322","P43212","I422","I4122",
  "P4mm","P4bm","P42cm","P42nm","P4cc","P4nc","P42mc","P42bc","I4mm",
  "I4cm","I41md","I41cd","P-42m","P-42c","P-421m","P-421c","P-4m2",
  "P-4c2","P-4b2","P-4n2","I-4m2","I-4c2","I-42m","I-42d","P4/mmm",
  "P4/mcc","P4/nbm","P4/nnc","P4/mbm","P4/mnc","P4/nmm","P4/ncc",
  "P42/mmc","P42/mcm","P42/nbc","P42/nnm","P42/mbc","P42/mnm",
  "P42/nmc","P42/ncm","I4/mmm","I4/mcm","I41/amd","I41/acd","P3",
  "P31","P32","R3","P-3","R-3","P312","P321","P3112","P3121",
  "P3212","P3221","R32","P3m1","P31m","P3c1","P31c","R3m","R3c",
  "P-31m","P-31c","P-3m1","P-3c1","R-3m","R-3c","P6","P61","P65",
  "P62","P64","P63","P-6","P6/m","P63/m","P622","P6122","P6522",
  "P6222","P6422","P6322","P6mm","P6cc","P63cm","P63mc","P-6m2",
  "P-6c2","P-62m","P-62c","P6/mmm","P6/mcc","P63/mcm","P63/mmc","P23",
  "F23","I23","P213","I213","Pm-3","Pn-3","Fm-3","Fd-3","Im-3",
  "Pa-3","Ia-3","P432","P4232","F432","F4132","I432","P4332","P4132",
  "I4132","P-43m","F-43m","I-43m","P-43n","F-43c","I-43d","Pm-3m",
  "Pn-3n","Pm-3n","Pn-3m","Fm-3m","Fm-3c","Fd-3m","Fd-3c","Im-3m",
  "Ia-3d"];

CR_3.hQClass := BlistList( [1..32], [2,5,8,15,20,27,32] );

CR_3.internatTableSpaceGroupType :=
  [1,2,3,4,5,6,7,8,9,10,13,11,14,12,15,16,17,18,19,21,20,
  22,23,24,25,28,27,30,32,34,26,31,29,33,35,37,36,38,39,40,
  41,42,43,44,46,45,47,49,50,48,51,54,53,52,57,60,59,56,55,
  58,62,61,65,66,63,67,68,64,69,70,71,72,74,73,75,78076,77,
  79,80,81,82,83,84,85,86,87,88,89,95091,93,90,96092,94,97,
  98,99,105,103,101,100,106,104,102,107,108,109,110,111,112,
  113,114,115,116,117,118,119,120,121,122,123,124,131,132,125,
  126,133,134,129,130,137,138,127,128,135,136,139,140,141,142,
  146,143,145144,148,147,155,149,153151,150,154152,160,161,156,
  158,157,159,166,167,162,163,164,165,168,171172,173,170169,174,
  175,176,177,180181,182,179178,183,184,186,185,187,188,189,190,
  191,192,194,193,195,198,196,197,199,200,201,205,202,203,204,
  206,207,213212,208,209,210,211,214,215,218,216,219,217,220,
  221,223,222,224,225,226,228,227,229,230];

CR_3.modulSp := 14;

CR_3.modulZ := 19;

CR_3.nameCrystalFamily :=
  ["triclinic","monoclinic","orthorhombic","tetragonal","hexagonal",
  "cubic"];

CR_3.nullDadeGroupsZClass :=
  [0,4,8,10,17,19,26,28,35,36,38,40,42,43,45,48,51,54,55,
  57,59,61,62,64,65,67,68,70,71,73,74,76,77,78,80,82,83,85,
  88,89,92,93,96,97,98,101,102,103,106,107,108,109,110,111,
  112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,
  127,128,129,130,131];

CR_3.nullGeneratorsZClass :=
  [0,1,2,3,4,5,6,8,10,12,14,16,18,20,22,24,26,28,31,34,37,
  40,42,44,46,48,51,54,57,60,63,66,69,72,75,78,82,86,87,88,
  90,92,94,96,98,100,102,104,107,110,113,115,117,120,123,126,
  129,132,136,139,142,145,149,153,157,161,165,169,173,177,181,
  186,191,196,197,200,204,207,211,214,218,221,225];

CR_3.nullQClass := [0,2,5,8,15,20,27,32];

CR_3.nullSpaceGroup :=
  [0,1,2,4,5,7,9,13,15,19,21,22,24,34,37,41,43,46,62,68,
  70,74,77,79,80,81,85,87,93,95,103,107,111,115,117,119,135,
  139,140,142,143,144,145,147,149,151,153,155,157,159,161,165,
  166,168,172,176,178,180,184,186,187,189,192,194,196,199,201,
  203,205,207,209,213,217,219];

CR_3.nullZClass :=
  [0,1,2,4,6,8,12,17,21,23,25,27,29,31,35,37,39,41,44,47,
  50,51,52,53,54,55,57,58,61,64,67,70,73];

CR_3.orbitLengthSpaceGroup :=
  [1,3,1,3,1,3,1,3,3,1,1,1,2,1,2,1,1,2,2,2,2,1,2,1,1,
  1,1,2,1,3,3,1,6,6,6,6,6,6,3,3,3,3,6,2,1,2,1,1,2,1,
  3,3,1,2,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,2,2,2,1,1,1,1,1,1,2,1,2,1,2,1,2,1,1,1,1,1,1,1,
  1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1];

CR_3.orderQClass :=
  [1,2,2,2,4,4,4,8,4,4,8,8,8,8,16,3,6,6,6,12,6,6,12,12,12,
  12,24,12,24,24,24,48];

CR_3.parametersDadeGroup :=
  [[3,6,7,1,0],[3,7,5,1,0],[3,7,5,2,0],[3,7,5,3,0]];

CR_3.QClassZClass :=
  [1,2,3,3,4,4,5,5,6,6,6,6,7,7,7,7,7,8,8,8,8,9,9,10,
  10,11,11,12,12,13,13,14,14,14,14,15,15,16,16,17,17,18,18,
  18,19,19,19,20,20,20,21,22,23,24,25,26,26,27,28,28,28,29,
  29,29,30,30,30,31,31,31,32,32,32];

CR_3.relatorNumbersQClass := CR_2.relatorNumbersQClass;

CR_3.rowConjugatorDadeGroup :=
  [[-1,-1,-1],[-1,-1,0],[-1,0,0],[-1,0,1],[-1,1,0],
  [0,-1,-1],[0,-1,0],[0,-1,1],[0,0,1],[0,1,-1],
  [0,1,0],[0,1,1],[1,-1,0],[1,0,-1],[1,0,0],
  [1,0,1],[1,1,1],[1,1,2]];

CR_3.rowGeneratorZClass :=
  [[-1,-1,-1],[-1,-1,1],[-1,0,0],[-1,0,1],[-1,1,0],[0,-1,0],
  [0,-1,1],[0,0,-1],[0,0,1],[0,1,-1],[0,1,0],[0,1,1],[1,-1,0],
  [1,0,-1],[1,0,0],[1,0,1],[1,1,-1],[1,1,0],[1,1,1]];

CR_3.spaceGroupIdentity :=
  [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];

CR_3.spaceGroupTypeInternatTable :=
  [101,202,303,403,504,605,705,806,906,1007,1207,1408,1107,1307,
  1508,1609,1709,1809,1909,2110,2010,2211,2312,2412,2513,3113,
  2713,2613,3313,2813,3213,2913,3413,3013,3514,3714,3614,3815,
  3915,4015,4115,4216,4316,4417,4617,4517,4718,5018,4818,4918,
  5118,5418,5318,5218,5918,5818,5518,6018,5718,5618,6218,6118,
  6519,6819,6319,6419,6619,6719,6920,7020,7121,7221,7421,7321,
  7522,7622,7722,7622,7823,7923,8024,8125,8226,8326,8426,8526,
  8627,8727,8828,9128,8928,9228,9028,9328,8928,9228,9429,9529,
  9630,10030,9930,10330,9830,10230,9730,10130,10431,10531,10631,
  10731,10832,10932,11032,11132,11233,11333,11433,11533,11634,
  11734,11835,11935,12036,12136,12436,12536,13236,13336,12836,
  12936,12236,12336,12636,12736,13436,13536,13036,13136,13637,
  13737,13837,13937,14139,14239,14239,14038,14441,14340,14643,
  14844,14743,14944,14743,14944,14542,15246,15447,15346,15547,
  15045,15145,15849,15949,16050,16150,15648,15748,16251,16551,
  16551,16351,16351,16451,16652,16753,16853,16954,17254,17254,
  17054,17054,17154,17355,17455,17655,17555,17756,17856,17957,
  18057,18158,18258,18458,18358,18559,18760,18861,18659,18961,
  19062,19162,19363,19463,19564,19262,19664,19765,19965,20066,
  20166,20267,19865,19865,20367,20468,20669,20870,20568,20769,
  20970,21071,21271,21171,21371,21472,21572,21772,21672,21873,21973];

CR_3.splittingSpaceGroupType :=
  BlistList( [ 1 .. 219 ], [76,89,92,142,147,149,163,165,170,172,198] );

CR_4.bZClass :=
  BlistList( [1..710],
  [2,7,8,12,13,14,34,35,36,37,38,39,53,86,87,88,89,90,91,
  92,93,108,109,120,130,131,133,173,242,243,244,245,246,295,
  296,329,330,331,332,333,337,338,359,378,379,419,428,464,482,
  507,563,564,565,566,567,569,574,576,604,621,636,637,691,710] );

CR_4.codedConjugatorDadeGroup :=
  [4273681,6400667,8480660,9279532,11195122,12279467,12298451,12357446,
  15623922,16613802,19260299,19325973,19338622,21004202,22465651,
  25279713,26836042,28656840,31486984,33244423,33246395,36157062,
  36697684,38833653,41968382,44304724,44306282,44363772,45130978,
  45337662,45343783,45784833,46572214,47083975,47317495,47397622,
  48109758,48237718,49885273,50081235,51253736,52059902,52533832,
  55437104,55553703,55555115,55574723,55789055,56101272,56102655,
  56162732,57492995,57493012,57494114,58023035,58431983,60708505,
  60747994,60822328,60823741,60825332,60933786,61155935,61158054,
  61216434,61217245,61274523,61389605,61588992,63349460,63376504,
  63493248,63508795,63508934,63546728,63548155,63549675,63604695,
  63605108,63605942,63663387,63664324,63804066,63804487,63804624,
  63804626,63807003,63811766,63862367,63921812,63980875,64018544,
  64021624,64137261,64137683,64137684,64137687,64137703,64140233,
  64235684,64236099,64354121,64371353,64373855,64470184,64470461,
  64470884,64604452,64604453,65725012,66724894,69053908,69054764,
  69056855,69066244,69163383,69508195,69527678,69565344,69626658,
  69722984,69800681,69843532,71449321,72153765,74193323,77232724,
  77585524,78052841,78052983,78052987,78053401,78053406,78053680,
  78053683,78053684,78873935,80453739,82383716,83069624,85693922,
  88404015,88424440,89811601,90220655,91360562,93731575,93749676,
  93990720,93991022,94000098,94049515,94144560,94145297,94167383,
  94318062,94402300,94435083,94525188,96497283,96594861,96595283,
  96595284,96646684,96709223,96715422,96849822,96889263,96944864,
  97003944,97009124,97084602,97087783,97123763,97123802,97124043,
  97160044,97165504,97199664,97204424,97223164,97261260,97261266,
  97261401,97261683,97261687,97261824,97261826,97264204,97277358,
  97283267,97303124,97318514,97398601,97398883,97426038,98124517,
  99809001,101220593,102435678,104963063,105118346,105177144,105179776,
  105179923,105391650,105491164,105501275,105515550,105531615,
  107883357,108140112,110197006,110610142,110668942,110785343,
  110950612,112021303,112270943,112962124,112972335,113058164,
  113061524,113137486,113193264,113196183,113196222,113369253,
  113375115,113376112,113529243,113686904,113726523,113736472,
  113884749,113956684,114747111,115518080,116058522,117390613,
  118450126,118684357,118686726,118745508,118778275,118783303,
  118798855,118823915,118898424,118898523,118900903,118901264,
  118901615,118902315,118918123,119074923,119074962,119075763,
  119117465,119117591,119195194,119214521,120488549,121194121,
  121542872,121544700,121546903,121646337,121662343,121664503,
  121664542,121671914,121758723,121761702,121780558,121781453,
  121957692,121958521,122114674,124330002,124488183,126679743,
  126681704,126682123,126682124,126916222,126918720,126975403,
  127074103,127074142,127095115,127152503,127152542,127187664,
  127249422,127251923,127251924,127427176,127444143,127446519,
  127486992,127487272,127487552,128465703,129424592,129716346,
  129719250,129815762,129818103,129835323,129835362,129837703,
  129838442,129874523,129874562,129876942,129879322,129995649,
  130346222,131229342,132461757,132579328,132902595,133805883,
  133931728,134659472,134896493,135145544,135160113,135482363,
  135579684,139346101,140793123,140793722,142416874,143007661,
  143007801,143008083,143088733,143245818,143301783,143478468,
  143478502,143497783,143534066,143536563,143536602,143556902,
  143595783,143596242,143598324,143615702,143623386,143691569,
  143694068,143729623,143735822,143804284,143811261,143811401,
  143811683,143811684,143889365,143906045,143908987,143909266,
  143909401,143909407,143909687,143909824,143912169,143951124,
  143984729,144043244,144043526,144046460,144046883,144047024,
  144047026,144058224,144063553,144871043,145634912,145990618,
  146009419,146120862,146136109,146454023,146459944,146460222,
  146469882,146548284,146674135,146695115,146799706,147614890,
  149198344,149610766,151966145,154716260,155552903,156808724,
  156865704,156905324,156921385,157157744,157355695,157371664,
  157433401,157433683,157628564,157629260,157629266,157629401,
  157629683,157629684,157631644,158747155,160011634,164016851,
  165317789,165958163,166020021,167790612,168410783,170524795,
  170682584,170682861,170682866,170683006,170683284,170816844,
  170820061,170820066,170820206,170823013,170876764,170918475,
  170918492,170935564,170937655,170938232,170977292,170995346,
  170996875,171035252,171035655,171035795,171035812,171039457,
  171055692,171151980,171152020,171152983,171152984,171153261,
  171153401,171153406,171153407,171153543,171153683,171153684,
  171153826,171154684,171165583,171251266,171251687,171251824,
  171255463,171388052,171389733,171389855,171391552,171485003,
  171508026,172169252,172341709,172739034,172742693,173328575,
  173628193,174092146,174096229,174136122,174190160,174195053,
  175429162,176069896,176075689,176289703,176405792,176425795,
  176425812,176525064,176662103,176683562,176835995,176836134,
  176837248,176838533,176838672,176839093,176854112,176859549,
  176860522,176977282,176978682,177049063,179054884,179267833,
  181427494,182286904,182286927,182288714,182326550,182484449,
  184815843,184893683,185030926,185090286,187628482,189698662,
  190557687,190600682,190811390,192160007,193127686,193323518,
  193442795,196026785,198446904,200706302,201673422,203352398,
  203411195,204027793,204106189,204359435,204437275,207260107,
  209678062,209685034,209708584,210904042,212461485,212461611,
  214156126,214894765,214907506,215828706,216925333,220802872,
  223509220,227338635,229114262,229133722,233222658,234926586,
  236132345,236891767,237759067,237812967,241385693,243228437,244256273];

CR_4.codedDadeGroupsZClass :=
  [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1321,2032,233,
  2978,1341,2181,3091,4702,4732,2173,4513,3524,3165,3205,1166,
  3537,3058,3509,2219,1321,2032,233,1698,1011,3251,3221,4182,
  1372,3233,4073,3184,3215,2115,2026,1977,2128,899,3249,1321,
  2032,233,1698,1341,2181,3091,4702,4732,2173,4513,3524,3165,
  2155,1166,3537,3058,3509,2219,1,1321,5,2208,771,1021,3752,
  3022,4822,692,623,1233,603,4803,678,4469,4261,4721,2384,1424,
  5424,4944,1565,495,1535,4525,1036,4196,1567,47,458,3649,1,5,
  3488,1021,3022,692,1233,603,988,4469,4261,5434,2404,1735,1725,
  4645,746,3907,4958,3649,4091,1678,1291,2181,4635,4388,521,4931,
  3742,3802,443,3723,4328,3012,4243,4913,4429,541,481,164,5015,
  5025,3925,3906,3897,4958,3719,3032,5522,513,919,1361,2418,3091,
  2181,1291,2155,2145,2878,521,4921,3742,3802,1273,3723,4328,531,
  4931,1772,1782,263,1923,478,2342,4763,4393,4913,889,5501,5491,
  5611,21,5644,5515,5475,5625,5605,1386,5657,5598,4029,19,2602,
  152,5462,4203,1269,4101,1678,1311,3041,3655,3438,1101,4491,
  1792,1802,713,1893,878,2342,4763,4393,4429,5501,5481,174,5585,
  105,145,136,127,118,1489,2592,5452,4053,669,1321,2418,1291,
  2181,3165,4388,521,4921,3742,3802,1273,3723,4328,3012,4243,
  4913,4429,1571,1551,5434,1655,1045,3915,5016,5007,3948,3719,
  3032,5522,513,4659,5634,2764,2374,305,325,5326,706,277,5247,
  288,1698,961,2438,1841,1601,908,4172,4043,4172,1283,4043,3999,
  4331,4571,1,4345,4155,3488,4112,1193,5122,2322,1703,1179,4239,
  4509,1404,315,5076,5337,288,8,951,4498,4172,1283,4539,1,5,
  2998,4112,3283,1179,4509,1698,1951,3601,4438,3621,2788,4172,
  3283,4172,1283,1213,3999,3591,3361,2551,4355,4165,3488,4112,
  3283,5122,2322,1703,1179,4239,4509,1698,1951,3601,4438,4301,
  2338,4172,4403,4043,4172,1713,789,1941,3601,2481,955,4145,3488,
  4112,2322,1703,4112,3283,4759,3429,639,8,3611,2968,4172,3283,
  4539,3601,5,2998,4112,3283,1179,4509,1351,4488,612,5033,99,
  1301,4488,432,5033,4879,1351,4488,612,5033,99,1321,4488,1321,
  4488,612,5033,99,612,723,99,1331,4488,4992,5033,4879,1351,
  4488,4992,723,4879,1321,4488,612,723,99,2792,333,5254,2366,
  417,5118,5299,5579,1,4595,2882,3823,5384,1516,3267,3878,5409,
  1599,1,2715,3192,423,1964,2196,297,5228,5299,189,1,4595,1,
  4635,3192,423,1964,2196,297,5228,5299,189,1,4615,1,4595,3072,
  3963,5394,1526,3837,3298,5409,2089,1,2715,1,2905,1,3685,1,
  2935,1,3695,1,3675,1,3675,1,2715,1,2905,1,3695,4475,2318,
  3009,2664,3155,3359,2664,4345,2249,5564,3404,1505,1645,3576,
  2356,4717,1087,468,3458,1071,4271,2628,1132,4083,3512,1003,
  1549,4699,5444,3905,3585,1666,747,468,928,4311,2648,1132,1003,
  5109,3989,5554,3854,1665,4785,5006,2636,3907,1097,468,3458,
  3458,1061,4311,2628,1051,4291,2628,1132,4033,1132,4033,3512,
  2943,3512,3313,1549,1549,4699,4699,5554,3854,4975,4785,5006,
  2636,3907,1097,468,3458,3458,1061,4291,2628,1051,4291,2628,
  1132,933,1132,4033,3512,3313,3512,3313,1549,1549,4699,4699,
  5414,3575,4795,4986,737,468,928,928,4281,2648,1071,2648,1132,
  3313,1132,3313,5109,5109,3989,3989,3458,1071,4271,2628,1132,
  4083,3512,1003,1939,3939,3458,1611,3371,2828,1132,4083,3512,
  1003,1419,3979,4458,4561,961,1688,2032,2223,2032,2073,1439,
  3979,4458,941,4541,1688,4062,2233,4062,4373,1479,5099,928,3371,
  2858,1132,1003,1419,3979,3458,1061,4311,2628,1132,4033,3512,
  2943,4969,5099,3458,3458,1631,3361,2828,3371,1621,2858,1132,
  4033,1132,4033,3512,2943,3512,3313,589,1419,3979,769,3458,1051,
  4291,2628,1132,4033,3512,2943,1939,3939,3498,4551,1688,2032,
  2073,1439,3979,928,3381,2858,1132,2833,1419,3979,2392,2583,
  2658,4854,1126,5357,2759,5369,1,3081,1835,4665,3332,1753,3448,
  5194,646,77,259,4819,2911,3081,835,3795,2052,3413,2678,2052,
  3413,2678,5154,3066,5267,5169,59,574,3066,377,5169,59,2911,
  2911,3081,4345,4135,3081,3705,3785,2392,2563,2678,5284,796,87,
  1499,2069,2911,3081,2505,2545,3302,1743,2298,364,806,387,1499,
  819,2911,3081,3125,3135,2392,2583,2658,4224,796,5347,2759,5379,
  1,1,3081,1835,4685,3081,1865,4675,2392,2583,2658,3734,596,
  5347,2759,5379,1,1,3081,1875,4685,3081,1865,4665,3332,1753,
  3448,344,656,197,259,4219,2911,2911,3081,835,3795,3081,845,
  3795,2012,2573,3448,5134,1186,197,259,4219,2911,2911,3081,845,
  3765,3081,855,3775,2802,1763,2678,5174,756,67,1499,3849,2911,
  2911,3081,2465,2535,3081,3145,3175,2911,1,1885,4665,1,1,3145,
  1,1,2895,1,1,1825,4155,1,1,1,3115,1,3105,2911,1,1835,4125,
  1,1,1,2515,1,2465,1,1,3665,2911,1,3695,5235,1,1,1,2705,1,
  2925,1,1,865,1,1,975,3485,2868,568,2619,1115,4258,4779,2694,
  2455,2284,2455,5544,2524,2305,1445,1459,2494,1855,4744,2725,
  225,2169,3885,3398,2268,2049,4975,4785,3398,4448,2268,2009,
  2049,3865,4368,2268,3478,2258,2009,2009,2049,3565,3398,2268,
  2268,2049,1589,505,3398,2268,4448,2268,2009,2009,1589,2848,
  2109,2268,3959,2268,3329,3478,3478,2109,559,2268,3959,2268,
  2009,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,204,34,995,4625,
  4014,4905,4585,214,4004,995,3884,4004,995,4625,4625,1394,5085,
  4605,5154,1209,5,3814,5539,5,4864,3279,1209,4585,4585,2094,
  5279,1209,4585,4585,5144,1209,684,1209,5,5,4585,354,2139,5539,
  5,4585,394,5539,5,5,1904,1209,5,4585,5,1914,5209,1209,4585,
  4585,5,5,5184,1209,5,5,5,404,5539,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5046,4837,4888,8,2,3559,3,1259,5046,4837,
  4898,8,2,1159,3,1249,5066,4847,4888,8,2,3559,3,1259,5066,
  4847,4888,8,2,3559,3,1259,5056,5067,4898,8,2,1159,3,1249,8,
  2,3559,3,1259,8,2,3349,3,1259,8,2,3559,3,1259,8,2,3559,3,
  1259,8,2,1159,3,1249,8,2,1159,3,1249,8,2,3559,3,1259,8,2,
  3559,3,1259,8,2,3349,3,1259,8,2,3349,3,1259,8,2,1159,3,
  1249,4348,2989,2478,2989,826,1227,3546,2447,826,3637,826,1987,
  3546,1817,2735,5219,1145,5219,4,2424,4585,4,4585,4,4,4,2685,
  5,4,4,2685,5,4,5,4,5,5,4,4,5,2685,4,4,5,2685,4,5,5,
  4585,2685,2685,4605,4585,4585,2685,4585,4585,5,5,5,5,5,5,
  2816,2816,2777,2777,2956,7,6,7,6,7,6,7,6,7,6,7,3468,9,
  3478,2749,3478,2749,2278,9,4418,9,1469,3478,2749,3468,9,3478,
  2749,3468,8,2278,5319,5319,8,9,4418,1999,249,3468,9,3468,
  3468,9,9,2278,8,1999,9,2278,5319,8,9,9,3468,9,8,1999,9,8,
  9,9,8,9,9,8,1999,9,2749,5309,9,5309,9,9,2749,2749,9,9,
  2749,2749,9,9,9,9,9];

CR_4.codedDecompositionQClass :=
  [665,675,555,95,675,345,675,345,95,675,675,96,676,96,676,676,
  425,355,425,435,435,365,435,375,465,385,455,475,395,445,465,
  405,475,455,475,485,505,525,26,426,36,436,436,26,426,436,36,
  426,36,436,436,436,436,66,46,56,466,476,76,476,56,456,476,
  66,446,466,76,456,76,456,466,476,476,476,476,495,515,535,
  486,576,496,496,496,576,486,576,496,496,496,586,606,596,596,
  606,646,636,626,616,646,656,636,656,616,616,656,636,646,656,
  656,656,656,696,526,726,536,506,526,686,716,516,736,536,516,
  726,536,536,696,526,736,706,726,716,736,536,536,726,536,166,
  286,196,296,316,176,276,186,306,286,316,206,316,306,296,316,
  2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,4,3,4,
  4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,4,4,3,4,4,4,4,4,
  4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,4,4,3,4,4,4,4,4,4];

CR_4.codedGeneratorsSpaceGroup :=
  [4,42,1,1,4,6,15,1,15,1,19,4,23,1,15,19,401,415,419,1515,
  1519,1542,1546,2319,2346,1500,1515,1542,1500,1,1501,15,1515,
  19,1519,4200,4201,4215,4219,1500,1515,42,1542,1554,442,1500,
  1542,401,15,419,1515,4,1,6,100,104,101,106,1500,1504,1501,
  1506,1900,1904,1901,1906,4,1500,1504,1500,1,1501,100,1900,101,
  1901,100,1500,1900,4200,4600,4,1500,1504,4200,4204,1500,1500,
  104,15,1,19,401,419,15,1500,100,1900,15,400,15,1,401,4,6,
  404,406,15,19,415,419,23,27,423,427,104,106,606,115,119,615,
  619,123,127,623,627,1515,1519,2319,1523,1527,2323,2327,1542,
  1546,2346,1549,1550,2349,2350,1923,1927,2727,1949,1950,2750,4,
  15,23,1515,1523,1542,1549,1,15,19,42,46,100,101,115,119,142,
  146,1500,1501,1515,1519,1542,1546,1900,1901,1915,1919,1942,
  1946,400,42,442,15,415,1542,2342,1515,2315,1554,2354,4242,
  4942,1500,1542,15,104,123,1515,15,1,19,54,58,119,154,454,
  458,4,1,6,101,106,5400,1,5401,401,6101,5400,1,5401,100,54,
  154,4954,5054,400,4200,4942,5400,1,100,442,642,5400,400,49,1,
  19,115,119,419,619,6,27,123,623,154,458,654,658,63,1923,
  2346,2358,1,5400,58,101,158,6,63,106,104,163,5804,606,663,1,
  4900,58,158,49,50,150,2349,2350,2342,2300,4215,2349,4923,5400,
  6300,1,4204,1506,5400,400,2715,23,42,1,46,49,50,142,101,146,
  104,149,106,150,1542,1546,1504,1549,1506,1550,1942,1946,1949,
  1906,1950,4242,4246,4249,4250,4646,4649,4650,5449,5450,5850,
  10100,10142,10146,10149,10150,11542,11546,11504,11549,11506,
  11550,11942,11946,11904,11949,11950,14242,14246,14249,14250,
  14642,14649,14650,15449,15450,15849,41500,41542,41501,41546,
  41549,41550,41900,41942,41901,41946,41950,44242,44201,44246,
  44642,44601,44646,44650,45400,45442,45401,45446,45450,45800,
  45842,45801,45846,45850,61900,61942,61946,61949,64642,64646,
  65400,65442,65446,65800,65842,65846,235442,235446,235846,275842,
  40000,40001,540000,610000,540001,610001,400,40400,401,40401,
  540400,610400,540401,610401,545400,615400,615401,6100,46100,6101,
  46101,546100,616100,546101,616101,10400,60400,10401,580400,630400,
  580401,630401,586100,636100,586101,40000,1,40001,40100,101,40101,
  40400,40401,40601,540000,610000,540001,610001,610100,540101,
  610101,610400,610401,610601,10000,60000,10001,60001,10100,60100,
  60101,60400,60401,60600,580000,630000,580001,630001,580100,630100,
  630101,630400,630401,630600,490000,1,490001,490100,101,490101,
  494900,494901,495001,540100,540101,230101,544900,544901,545001,
  10100,500100,505000,585000,540000,540049,100,540100,149,540149,
  5400,545400,5449,545449,5800,545800,5849,545849,490100,230100,
  490149,230149,495400,235400,495449,495800,235800,495849,235849,
  10100,580100,580149,15800,585800,15849,585849,505800,275800,
  505849,54,42,540000,540042,540015,540400,540454,540415,420000,
  420054,420400,420454,420415,150442,424200,540000,54,600,540600,
  654,10000,1,10100,150404,190404,150406,190604,540000,10000,
  580000,10100,580100,44204,614204,64204,634204,64604,634604,54,
  540000,400,454,540400,540000,40000,610000,40400,610400,190004,
  194649,10404,42,100,142,146,49,149,50,1549,1949,40000,40042,
  40100,40142,40001,40046,40146,40004,40049,40104,40149,40006,
  40050,40150,41542,41942,41546,41549,41949,41550,230000,230042,
  230100,230142,230001,230046,230101,230146,230004,230049,230104,
  230149,230106,230150,231500,231542,231900,231942,231901,231946,
  610000,610042,610100,610142,610001,610046,610004,610104,611542,
  611942,100,540000,540100,104,540104,40000,40100,610000,610100,
  40004,40104,610004,610104,60000,60100,630000,630100,60004,630004,
  100,40000,40100,1,40001,540000,540100,610000,610100,540001,
  610001,400,600,40400,40600,401,40401,540400,540600,610400,610600,
  540401,610401,100,230000,230100,230049,230149,540000,540100,
  490000,490100,540049,540149,10000,10100,270000,270100,270049,
  270149,580000,580100,500000,500100,580049,580149,4900,100,5000,
  230000,234900,230100,235000,230101,235001,400,150000,150042,40000,
  40400,230000,230400,230042,230442,60000,54,60054,100,10000,10100,
  490404,490604,500404,500604,100,540000,540100,400,40000,40400,
  540000,40000,610000,464242,15,42,54,115,142,154,420015,420100,
  420115,420154,46,58,158,420119,23,61,123,161,420123,420161,63,
  442,454,642,654,420415,420600,420615,401,419,446,458,619,646,
  658,420401,420419,420446,420458,420619,449,461,623,649,661,
  420449,420461,420623,420661,406,427,450,463,650,663,420406,
  420427,420450,420463,420650,420663,2342,2354,2742,2754,422700,
  2346,2358,2746,422301,2349,2749,2306,2350,422306,424200,424215,
  424615,424201,424219,424619,424223,424623,424227,424901,424919,
  425019,425023,424906,424927,426106,10415,10442,10454,10600,10615,
  10642,10654,460415,460454,460600,460615,460654,10446,10458,460401,
  460419,460619,10449,10461,10604,10623,10649,10661,460461,460604,
  460623,460649,460661,10406,10427,10450,10463,10663,460406,460427,
  460450,460463,460663,12342,12700,12715,12742,12754,462300,462342,
  462700,462715,462742,12304,12349,12704,12749,462304,462349,462704,
  12706,12750,462706,14654,464600,464615,14223,14261,14623,464261,
  464623,464661,464663,15042,15054,464915,465000,465015,14923,14961,
  15004,15023,15049,15061,464923,464961,465004,465023,465061,14927,
  14950,14963,15063,464906,464927,464963,465027,16100,16300,16315,
  16342,466100,466300,466315,466354,16104,16149,16304,466104,466304,
  466349,466306,62342,62700,62742,62754,502342,502700,502742,502754,
  62346,62358,62349,505000,505015,65400,65800,505800,66300,506300,
  636300,1,400,401,10400,10401,6,100,600,601,10100,10101,10600,
  10601,104,10104,10106,5400,5401,6100,6101,15400,16100,16101,
  5404,5406,15404,5800,6300,6301,15800,15801,16300,16301,5804,
  15804,15806,40100,40101,40600,60101,60600,60601,60606,45400,
  45401,46100,46101,65400,65401,66100,46104,46106,66104,45800,
  45801,46300,65800,65801,66300,66301,46304,66304,66306,545400,
  545401,546100,546101,586100,586101,545406,545800,546300,546301,
  585800,585801,586300,586301,545804,585804,585806,615800,615801,
  616300,635801,636300,636301,636306,1,544900,58,4900,4901,540000,
  4958,27,540049,4927,100,545000,158,5000,5001,540100,149,150,
  545049,540149,5027,5400,5401,545400,2358,542349,5427,2350,5800,
  545800,542749,10100,585000,10158,15000,15001,580100,580149,15027,
  15400,15401,585400,12358,582349,15427,12350,15800,585800,582749,
  495400,232358,235401,492349,235427,495800,232749,492749,505800,
  502749,15,42,54,6142,23,5442,454,442,5404,5423,5449,2354,
  45400,45442,40454,40442,44254,41554,60000,545400,635400,65400,
  636300,1,54,58,100,154,44204,41506,44261,41563,44604,44661,
  10100,10154,64604,64661,40000,4,40004,540000,540004,400,40400,
  540400,10042,10149,17,15,17,15,4,100,1500,1900,100,1500,15,
  404,423,400,1500,2300,1500,1542,100,1500,4400,4200,404,5204,
  4904,1700,1500,404,4200,404,4904,15,4215,1515,423,4923,2323,
  4200,406,15,4215,427,54,4254,463,6,15,27,40000,40006,40015,
  40027,150015,150027,150000,150006,150054,150063,230015,230027,
  230000,230006,230054,230063,15,54,10004,610049,610004,150015,
  150000,150042,43,16,15,15,15,4300,1600,1600,15,15,15,18,16,
  15,15,1500,15,1515,4215,1800,1600,1500,15,15,15,1500,1515,
  1542,17,15,42,3,1,42,4,42,100,1500,2300,5400,6100,100,4200,
  4600,100,400,600,600,400,100,4200,54,1500,42,1542,404,2304,
  449,2349,15,1515,54,1554,423,2323,461,2361,1500,100,1900,42,
  1542,142,1942,15,1515,115,1915,54,1554,154,1954,5400,401,6101,
  1500,2301,100,54,154,4200,4600,100,454,654,1,101,458,658,100,
  5400,5800,1,101,5401,5801,100,2354,2754,400,600,1554,1954,100,
  5400,5800,1515,1915,4215,4615,650,606,42,406,100,42,15,54,
  4600,100,4200,5400,2304,1500,404,6104,1700,1500,404,2904,2304,
  42,1742,1542,449,2949,2349,1700,1500,100,2200,1900,42,1742,
  1542,142,2242,1942,100,4200,4600,401,1500,2301,300,100,1554,
  3454,1954,300,100,1515,3415,1915,1,1515,1519,1,1500,1501,15,
  100,115,800,600,100,2346,1500,446,54,15,40001,40019,150015,
  150000,230019,230001,420015,490001,490019,540015,540000,610019,
  610001,40023,6,27,230023,150027,150006,490023,420027,610023,
  540027,540006,54,40058,150054,230058,490058,540054,610058,63,
  150063,540063,6,15,27,40000,10000,40015,40027,150015,150027,
  150000,150006,230015,230027,230000,190000,420015,420027,490015,
  490027,540015,540027,540000,540006,610015,610027,610000,580000,54,
  63,40054,40063,150054,150063,230054,230063,540054,540063,610054,
  610063,60000,54,60054,10000,40000,10054,40054,420000,500000,
  460000,490000,540000,40004,40061,6,63,150000,230004,150006,1,
  10001,10000,49,50,10050,10049,40054,150001,190001,60054,40023,
  150050,190050,60023,1,490000,50,10001,10000,10050,500000,40015,
  150019,420015,150063,190019,60015,190063,460015,15,150000,630063,
  54,630027,40006,610027,40050,15,54,630054,630042,630000,10000,
  420000,540000,610061,610004,10046,50,150000,150050,150027,1700,
  1500,42,1742,1542,6,1706,1506,50,1750,1550,15,1715,1515,54,
  1754,1554,27,1727,1527,63,1763,1563,5600,5400,6,5606,5406,300,
  100,1,301,101,1554,3454,1954,1558,3458,1958,100,49,149,400,
  600,449,649,117,15,42,184,54,406,4900,4206,100,1500,1900,42,
  142,1542,1942,100,100,2300,2700,1,400,401,600,100,400,1500,
  2300,42,442,1542,2342,401,100,1515,1915,100,1554,1954,15,401,
  4400,4200,1500,6700,5400,400,5200,4900,2300,7100,6100,15,4415,
  4215,1515,6715,5415,415,5215,4915,2315,7115,6115,5600,5400,401,
  6501,6101,100,1,101,400,600,401,601,300,100,49,349,149,400,
  1200,600,449,1249,649,2200,1500,15,2215,1515,4250,4949,401,15,
  40000,40015,150015,150000,230015,230000,420015,490000,490015,
  540015,540000,610015,610000,6,27,40027,150027,150006,230027,
  420027,490027,540027,540006,610027,54,40054,150054,230054,490054,
  540054,610054,63,150063,540063,54,40000,40054,6,63,1,10001,
  10000,150000,610001,630001,190000,49,50,10050,10049,150049,
  610050,630050,190049,15,630000,150000,54,630042,490006,420006,
  150000,42,150042,600,150600,642,150642,420000,540000,420042,
  540042,420600,540600,420642,540642,6,150006,50,150050,606,150606,
  650,150650,420006,540006,420050,540050,420606,540606,420650,
  540650,15,150015,54,150054,615,150615,654,150654,420015,540015,
  420054,540054,420615,540615,420654,540654,27,150027,63,150063,
  627,150627,663,150663,420027,540027,420063,540063,420627,540627,
  420663,540663,1500,151500,1542,151542,2700,152700,2742,152742,
  421500,541500,421542,541542,422700,542700,422742,542742,1506,
  151506,1550,151550,2706,152706,2750,152750,421506,541506,421550,
  541550,422706,542706,422750,542750,1515,151515,1554,151554,2715,
  152715,2754,152754,421515,541515,421554,541554,422715,542715,
  422754,542754,1527,151527,1563,151563,2727,152727,2763,152763,
  421527,541527,421563,541563,422727,542727,422763,542763,54,600,
  654,540000,540054,540600,540654,6,63,606,663,540006,540063,
  540606,540663,10000,490000,500000,1,10001,490001,500001,41554,
  61554,421554,461554,41558,61558,421558,461558,100,10100,490100,
  500100,101,10101,490101,500101,41954,61954,421954,461954,41958,
  61958,421958,461958,10100,100,10000,49,10149,149,10049,152300,
  192700,152700,192300,152349,192749,152749,192349,4900,15000,5000,
  14900,4949,15049,5049,14949,155400,195800,155800,195400,155449,
  195849,155849,195449,421500,1500,420000,42,421542,1542,420042,
  4200,425400,5400,424200,4242,425442,5442,424242,540000,40106,
  610106,494900,234900,425006,155006,40100,150000,230100,420000,
  490100,540000,610100,42,40142,150042,230142,420042,490142,540042,
  610142,40400,600,230400,150600,490400,420600,610400,540600,40442,
  642,230442,150642,490442,420642,610442,540642,1500,41900,151500,
  231900,421500,491900,541500,611900,1542,41942,151542,231942,
  421542,491942,541542,611942,42300,2700,232300,152700,492300,
  422700,612300,542700,42342,2742,232342,152742,492342,422742,
  612342,542742,40000,150000,230000,600,40600,150600,230600,4200,
  44200,154200,234200,5000,45000,155000,235000,42,40042,150042,
  230042,642,40642,150642,230642,4242,44242,154242,234242,5042,
  45042,155042,235042,1500,41500,151500,231500,2700,42700,152700,
  232700,5400,45400,155400,235400,6300,46300,156300,236300,1542,
  41542,151542,231542,2742,42742,152742,232742,5442,45442,155442,
  235442,6342,46342,156342,236342,40400,5400,46100,40100,600,45800,
  6300,40000,600,40600,5400,45400,6300,46300,10000,235400,275400,
  45454,65454,150054,190054,100,10100,235800,275800,45854,65854,
  150154,190154,10000,230000,270000,4900,14900,234900,274900,100,
  10100,230100,270100,5000,15000,235000,275000,100,1,101,152300,
  152700,152301,152701,4900,5000,4901,5001,155400,155800,155401,
  155801,100,4900,5000,1,101,4901,5001,151500,151900,156100,
  156300,151501,151901,156101,156301,15,420000,420015,4200,4215,
  424200,424215,15,420000,420015,1500,1515,421500,421515,5400,
  40400,46100,460006,10000,420006,170000,150000,420000,840000,
  540000,600,170600,150600,420600,840600,540600,6,170006,150006,
  420006,840006,540006,606,170606,150606,420606,840606,540606,15,
  170015,150015,420015,840015,540015,615,170615,150615,420615,
  840615,540615,27,170027,150027,420027,840027,540027,627,170627,
  150627,420627,840627,540627,4200,174200,154200,424200,844200,
  544200,5000,175000,155000,425000,845000,545000,4206,174206,154206,
  424206,844206,544206,5006,175006,155006,425006,845006,545006,4215,
  174215,154215,424215,844215,544215,5015,175015,155015,425015,
  845015,545015,4227,174227,154227,424227,844227,544227,5027,175027,
  155027,425027,845027,545027,560000,540000,6,560006,540006,40100,
  650100,610100,40106,650106,610106,30000,10000,4900,34900,14900,1,
  30001,10001,4901,34901,14901,41554,121554,61554,46154,126154,
  66154,41558,121558,61558,46158,126158,66158,10000,49,10049,100,
  10100,149,10149,45400,65400,45449,65449,45800,65800,45849,65849,
  440000,420000,42,440042,420042,1500,441500,421500,1542,441542,
  421542,10006,460000,420006,60000,42,60042,10000,10042,40042,
  150000,150006,150042,150050,230006,230000,230050,230042,420042,
  420050,490050,490042,540042,540050,540000,540006,610050,610042,
  610006,54,60054,10054,150054,150063,230063,230054,540054,540063,
  610063,40004,540000,610004,6,540006,540000,10000,10049,150015,
  420015,630061,630015,1,540001,10001,10050,150019,420019,630063,
  630019,42,150000,150042,54,150054,40001,150050,15,600,615,1500,
  1515,2700,2715,1000000,1000015,4000000,4000015,1001500,1001515,
  4001500,4001515,15000000,15000015,15000600,15000615,15001500,
  15001515,15002700,15002715,19000000,19000015,23000000,23000015,
  19001500,19001515,23001500,23001515,42000015,42000615,42001500,
  42001515,42002700,42002715,46000000,46000015,49000000,49000015,
  46001500,46001515,49001500,49001515,54000000,54000015,54000600,
  54000615,54001500,54001515,54002700,54002715,58000000,58000015,
  61000000,61000015,58001500,58001515,61001500,61001515,6,27,606,
  627,1506,1527,2706,2727,1000027,4000027,1001506,1001527,4001506,
  4001527,15000006,15000027,15000606,15000627,15001506,15001527,
  15002706,15002727,19000027,23000027,19001506,19001527,23001506,
  23001527,42000027,42000627,42001506,42001527,42002706,42002727,
  46000027,49000027,46001506,46001527,49001506,49001527,54000006,
  54000027,54000606,54000627,54001506,54001527,54002706,54002727,
  58000027,61000027,58001506,58001527,61001506,61001527,54,654,1542,
  1554,2742,2754,1000054,4000054,1001542,1001554,4001542,4001554,
  15000054,15000654,15001542,15001554,15002742,15002754,19000054,
  23000054,19001542,19001554,23001542,23001554,42001542,42001554,
  42002742,42002754,46000054,49000054,46001542,46001554,49001542,
  49001554,54000054,54000654,54001542,54001554,54002742,54002754,
  58000054,61000054,58001542,58001554,61001542,61001554,63,663,1550,
  1563,2750,2763,1001550,1001563,4001550,4001563,15000063,15000663,
  15001550,15001563,15002750,15002763,19001550,19001563,23001550,
  23001563,42001550,42001563,42002750,42002763,46001550,46001563,
  49001550,49001563,54000063,54000663,54001550,54001563,54002750,
  54002763,58001550,58001563,61001550,61001563,5400,5415,6300,6315,
  1005400,1005415,4005400,4005415,15005400,15005415,15006300,15006315,
  19005400,19005415,23005400,23005415,42005415,42006315,46005400,
  46005415,49005400,49005415,54005400,54005415,54006300,54006315,
  58005400,58005415,61005400,61005415,5406,5427,6306,6327,1005427,
  4005427,15005406,15005427,15006306,15006327,19005427,23005427,
  42005427,42006327,46005427,49005427,54005406,54005427,54006306,
  54006327,58005427,61005427,5454,6354,1005454,4005454,15005454,
  15006354,19005454,23005454,46005454,49005454,54005454,54006354,
  58005454,61005454,5463,6363,15005463,15006363,54005463,54006363,
  54005400,600,54006300,5400,54000000,6300,54000600,4000000,61005400,
  4000600,61006300,4005400,61000000,4006300,61000600,6,54005406,606,
  54006306,5406,54000006,6306,54000606,1,100,101,4900,4901,5000,
  5001,1000000,1000001,1000100,1000101,1004900,1004901,1005000,
  1005001,49,50,149,150,4949,4950,5049,5050,1000049,1000050,
  1000149,1000150,1004949,1004950,1005049,1005050,42001500,61006101,
  42001900,61006301,42006100,61001501,42006300,61001901,46001500,
  63006101,46001900,63006301,46006100,63001501,46006300,63001901,
  42001549,61006150,42001949,61006350,42006149,61001550,42006349,
  61001950,46001549,63006150,46001949,63006350,46006149,63001550,
  46006349,63001950,50005000,1500,50006300,42000000,6005000,42001500,
  6006300,50005042,1542,50006342,6005042,42001542,6006342,6002700,
  42005400,50002700,5400,6002742,50002742,5400,49000606,49006306,
  42000006,42005406,45,43,42,43,18,16,15,43,15,18,16,15,43,
  4300,2301,9201,42,2800,1600,42,1642,4300,15,4315,5500,8300,42,
  27,63,42,15,54,400,42,442,42,15,54,4200,404,4904,42,4242,
  449,4949,54,1500,15,1515,42,1542,54,1554,1500,15,1515,42,
  1542,54,1554,54,54,4500,4300,4200,1500,7300,9000,5400,1643,
  1800,1600,1500,42,1842,1642,1542,1800,1600,1500,42,1842,1642,
  1542,1643,1643,2304,42,2349,404,1500,449,1542,54,1500,15,1515,
  42,1542,54,1554,1500,15,1515,42,1542,54,1554,54,54,42,100,
  142,1800,1600,1500,42,1842,1642,1542,1800,1600,1500,42,1842,
  1642,1542,3243,3243,4200,10001,14201,42,4242,10046,14246,2700,
  6300,12701,16301,2742,6342,12746,16346,54,4200,15,4215,42,4242,
  54,4254,1500,5400,1515,5415,1542,5442,1554,5454,4200,15,4215,
  42,4242,54,4254,1500,5400,1515,5415,1542,5442,1554,5454,54,54,
  1800,1600,1500,15,1815,1615,1515,42,1842,1642,1542,54,1854,
  1654,1554,4300,54,4354,1500,1542,1500,1542,1800,1600,1500,4200,
  9400,9500,5400,42,1842,1642,1542,4242,9442,9542,5442,5700,5500,
  5400,42,54,1500,1542,150000,15,150015,42,150042,54,150054,1500,
  151500,1515,151515,1542,151542,1554,151554,4200,154200,4215,
  154215,4242,154242,4254,154254,5400,155400,5415,155415,5442,
  155442,5454,155454,54,5400,5454,150000,540000,1500,151500,421500,
  541500,5400,155400,545400,420000,420015,1500,421500,1515,421515,
  5400,425400,425415,5400,5400,150000,540000,15,150015,420015,
  540015,54,150054,420054,54,180000,160000,150000,42,180042,160042,
  150042,1500,181500,161500,151500,1542,181542,161542,151542,4200,
  184200,164200,154200,4242,184242,164242,154242,5400,185400,165400,
  155400,5442,185442,165442,155442,160043,5400,165443,150000,150042,
  1500,151500,1542,151542,5400,155400,155442,420000,420015,1500,
  421500,1515,421515,5400,425400,425415,5400,5400,42,54,1500,1542,
  1515,1554,5400,5442,5415,5400,15000000,54000000,15,15000015,
  42000015,54000015,54,15000054,42000054,150000,15150000,42150000,
  54150000,150015,15150015,42150015,54150015,150042,15150042,42150042,
  54150042,150054,15150054,42150054,54150054,540000,15540000,54540000,
  540015,15540015,42540015,54540015,540054,15540054,42540054,540000,
  54,540054,404,4200,4901,4200,4206,600,442,54,6,40004,540054,
  540063,610061,6,10004,150015,150027,230023,420042,150050,460049,
  54,63,40061,630006,610004,27,54,270000,60015,60063,54,54,60054,
  540000,40000,610000,6,63,10000,190000,6,230006,150006,63,40000,
  60050,60000,60000,54,270000,150027,64215,40600,490600,40000,
  490000,45400,6300,540000,150000,580004,190004,150600,5400,490600,
  500000,10600,60042,420042,14200,505000,425042,54000000,5454,600,
  54000600,606,6,54006306,54005406,663,63,54005463,5400,6000000,
  5406,1000400,1006100,5454,54,5463,6000054,1006154,1000454,1000100,
  1005800,600,6300,6000600,6306,1005854,1000154,6354,654,6363,
  6000654,6000000,54,6000054,6005400,5454,6005454,42001500,42001506,
  42001554,42001563,1000454,1006154,46002300,46002306,46002354,
  46002363,1000154,1005854,46001900,46001906,654,663,6363,46000400,
  42000600,61000450,54,63000650,5400,6006300,6000600,42000600,
  42001500,2700,5454,2727,2750,50,5427,6006350,6006327,6000627,
  6004254,6004200,600,1500,2700,5000,600,2700,615,40400,150000,
  230400,5400,46100,155400,236100,40100,600,230100,150600,45800,
  6300,235800,156300,501506,420000,61506,60000,5400,65400,404,
  60404,6104,66104,424215,504215,421515,501515,424923,504923,422323,
  502323,541500,600,542700,1500,540000,2700,540600,40104,611904,
  40404,612304,41904,610104,42304,610404,606,64200,65006,54,150650,
  150627,40600,40000,600,45015,44215,5015,45042,5042,40654,150042,
  61500,271542,54000000,6060000,63060000,54005400,6065400,63065400,
  6000000,63000000,60000,54060000,6005400,63005400,65400,54065400,
  15000000,27060000,15005400,27065400,50000000,27000000,42060000,
  15060000,50005400,27005400,15065400,58040001,61010001,61015401,
  61040001,58010001,61045401,58015401,23040001,19010001,23045401,
  540000,50060600,50630600,42420015,6500615,54,54,4200,4215,4200,
  54,4242,54,54,4215,4200,54,4200,425400,425400,54,5442,421500,
  421500,5442,5415,42,420000,5400,425400,150015,5400,155415,150000,
  5400,155400,5400,150042,155442,150000,5400,155400,420042,420015,
  54,54,420054,420000,5400,150015,155415,54,5400,5454,5400,150015,
  155415,420000,5400,425400,5400,4200,1500,1542,1515,54,5400,
  421500,424200,54,5454,421554,424254,8000,8300,8700,1005,743,
  6600,205,6805,6600,78316,110000,118300,8300,667655,1111,71616,
  830000,870202,110202,900,900,90000,1005,90000,96216,43,62300,
  62343,43,61900,61943,43,585000,585043,43,43,190600,62300,61923,
  582300,40100,61900,42,1904,42,1949,23191901,42,23191946,42,
  23500004,27001915,42,27001954,42,27,59853210,27232517,2315,4300,
  27239717,9215,4300,23190015,23194315,69623300,23500004,88983304,
  4300,15011500,15019000,42006115,4300,42009915,42,6190000,1501,
  6191501,42,6190042,1546,6191546,19230004,42,19230049,58230054,42,
  1150600,270404,1060104,42,1150642,270449,1060149,42420100,421515,
  42001915,42,42420142,45,43,42,230600,230645,230643,230642,192300,
  192345,192343,192342,45,43,42,62300,62345,62343,62342,45,43,42,
  235800,235845,45,43,42,41500,41545,41543,41542,202416,196100,
  419616,231900,15,231915,192300,585000,61915,39312100,19231900,42,
  39312142,19231942,23190004,42,23190049,23500052,42,15011500,42,
  15011542,6580006,4300,2301,9201,4300,23191901,23199101,133300,
  4300,6230015,6234315,4300,42,192300,192342,15,63,192315,192363,
  61900,61942,61915,61963,42,62300,62342,235000,505800,42,190600,
  190642,191501,191546,2701,2746,196100,42,100,142,1504,1549,1904,
  1949,4200,19061915,19065815,600,42,4151500,4151542,19152301,
  19152346,27000401,27000446,19230000,4200,23060000,23064200,1501,
  5401,23061501,23065401,42,4242,23060042,23064242,1546,5446,
  23061546,23065446,4200,19230001,19234201,42,4242,19230046,19234246,
  58500000,42,58500042,4200,23190000,23194200,1040423,1044923,
  27270423,27274923,42,4242,23190042,23194242,1040461,1044961,
  27270461,27274961,6610000,42,6610042,4500,4300,4200,19061500,
  19067300,19069000,19065400,100,4800,7800,4600,19061900,19067400,
  19069100,19065800,4500,4300,4200,19232315,19237515,19239215,
  19236115,4500,4300,4200,4500,4300,4200,271500,277300,279000,
  275400,1040400,1045300,1048200,1044900,1192300,1197500,1199200,
  1196100,93263832,9240516,50232300,2301,42,2346,1501,400,1546,442,
  19230615,42,19230654,42,23041900,1041523,27000123,42,23041942,
  1041561,27000161,42,40302100,23191900,42,40302142,23191942,1500,
  40303700,23190100,1542,40303742,23190142,42,19060015,19060054,
  61231404,600,4200,19232300,19236100,19230100,19234600,2700,6300,
  58061900,4200,400,4900,6190406,6194906,6190006,6194206,427,4927,
  27,4227,6190015,6194215,6190415,6194915,42,4242,442,4942,6190450,
  6194950,6190050,6194250,463,4963,63,4263,6190054,6194254,6190454,
  6194954,4200,19230001,19234201,42,4242,19230046,19234246,600,42,
  642,4200,2700,6300,1061900,1065800,1060400,1064900,23060001,
  23064201,23062701,23066301,27001901,27005801,27000401,27004901,42,
  4242,2742,6342,1061942,1065842,1060442,1064942,23060046,23064246,
  23062746,23066346,27001946,27005846,27000446,27004946,6190600,42,
  6190642,4200,900,8500,3300,97983,817000,96677,35095100,83720000,
  47896043,86003600,201164,361143,6100,4254,1500,401,100,6300,
  542300,42300,420015,492315,494215,6300,10642,10000,100,10100,
  60000,425400,150100,161,150061,540000,40015,40149,161,544946,
  192300,495400,635400,62342,6100,14200,12300,610042,616142,425000,
  424900,100,235042,610142,6194600,54231900,54231500,100,54421500,
  610100,23610115,49542315,15540419,19000600,1540119,42012300,
  54000000,42002361,10061,54010061,15542306,15544600,6306,1060001,
  6000006,42540042,46630046,50540050,15006300,1,15006301,16342,
  15010042,1000000,16142,1016142,541900,544900,6300,6490404,63060049,
  54460442,41900,1001515,1040115,1001915,425000,23151500,6300,
  23540000,23155000,23495000,616300,23546100,610100,6300,231500,
  235000,14642,142,14200,6163000000,27044200,15614206,6540006,
  15611500,6545400,5406,27041506,100,42234200,42234600,1,101,
  42234201,42234601,4954545401,6101630000,490049060019,163010142,1,
  192346194604,163016100,230654544249,2300540400,231954004949,
  42319614242,610163000042,610015,16300,636100,11501,1006300,10600,
  11961,61001923];

CR_4.codedGeneratorZClass :=
  [109593899,107544718,107687275,107702651,109451342,109420590,
  107687275,107544718,107702651,107544718,109589726,107548892,
  109589599,107548891,107544718,107548892,107544718,107549018,
  107544718,109455515,107687275,109424763,107702651,109455518,
  107687275,109424763,107702650,107687399,109455518,109455518,
  107687276,109451342,109455515,109420590,109424763,109451342,
  109455518,107683099,107687275,109420591,109424763,109451218,
  109455518,109451341,109455518,109451342,107683102,109420590,
  107698478,107683099,109451342,109420591,107698478,107683099,
  109451218,109451341,107683099,107687275,109455515,107544718,
  107702651,109424763,107544718,107687275,109455518,107544718,
  107702650,109424763,107544718,107687399,109455518,107544718,
  107687276,109455518,107544718,109424673,109589599,109451423,
  109589726,109448144,109458221,109448144,107679904,109958779,
  109457598,107133714,107680279,109420547,107549016,113369024,
  107548891,109590101,109448144,107548514,107689981,107705482,
  107549016,107705482,107695280,101960407,107549016,107549018,
  107698569,107544718,107683183,107548891,107544718,107689981,
  107679904,107544718,107680279,107133714,107544718,109589601,
  107702694,107544718,113379101,109589726,107544718,107689981,
  107548514,107544718,107705482,107549016,107544718,109589601,
  120897342,107544718,109589726,109455515,109593818,109458221,
  107687275,109455515,109458221,109586528,109455515,109457598,
  109586903,109040338,107680279,109040338,109586903,107549016,
  109589683,107702776,107548891,109586528,113376395,109448144,
  109596605,109455138,107689981,109455138,109596605,107549016,
  109596605,107702776,107695280,109596605,109586403,107549016,
  109586403,120894882,109589726,107548810,107687275,107679904,
  107551597,109596605,109458221,107683102,107687275,107680279,
  107550974,109965031,109457598,108052155,107687275,107549016,
  109420465,109589683,107548891,113372222,109596605,107689981,
  107541520,109586903,109448144,107683477,107687275,109427469,
  107541520,107702776,107695280,109420465,109596605,107549016,
  120890586,109586403,109589726,107687275,109593818,107544718,
  107689981,109455515,107687275,107544718,107680279,109040338,
  109586903,107544718,109589601,107702776,109593817,107544718,
  113379101,109586528,109596605,107544718,107689981,109455138,
  109596605,107544718,107549016,109596605,107702776,107544718,
  109589601,120894882,109596605,107544718,113356846,96212481,113361019,
  113361144,107544718,113356846,107544718,96212481,107683102,96212606,
  113372222,96212606,109451217,96212481,96197230,96212481,107683102,
  96216779,109451217,113361144,107687275,96216779,113376395,113361144,
  113372222,107544718,96212606,109451217,107544718,96212481,113237639,
  113238011,96259106,96258734,96201403,113237639,109424763,92403531,
  107702651,92403531,113372222,113237639,109420590,92403531,107698478,
  92403531,96201403,96259106,109424763,115263470,96201403,115263470,
  115267643,92399358,107548891,115263470,109424763,115267643,109420590,
  115267643,109424763,92399358,96201403,92399358,107548891,109424763,
  115263470,113363692,92395077,115271556,113353276,113360938,113363725,
  108894963,108242907,96212566,96219860,107544718,96219857,107544718,
  113356927,107544718,113353648,107544718,108242907,107544718,96212566,
  107544718,113353273,113368651,96209407,107687194,96216698,96201322,
  96216698,109458221,96219485,96204109,96219485,109457598,109765098,
  108897842,109765098,108058407,107434279,108240775,107434279,96197315,
  96212566,109451302,96212566,113379101,113363850,107690106,113363850,
  96204482,96209407,107683183,96216698,96197311,96216698,96194032,
  96219485,109448144,96219485,108058407,109765098,108240775,109765098,
  108897842,107434279,109457598,107434279,113376310,96212566,107687315,
  96212566,96194032,113363850,109448019,113363850,96204482,107544718,
  113363726,107683183,107544718,96212687,96197311,107544718,96212687,
  96204109,107544718,113363725,109448144,107544718,96209408,107680279,
  107544718,107434279,108240775,107544718,107434279,96197315,107544718,
  96212566,107687315,107544718,113361059,96194032,107544718,96209283,
  109448019,107544718,96209283,109593818,113360938,109596605,113363725,
  109040338,108894963,107687275,108242907,109589311,96212566,109586028,
  96209283,107544799,113360938,107541520,113363725,108052155,108894963,
  109451342,108242907,107549306,96212566,107541520,113363850,113372303,
  96212606,109458221,96212606,108240775,107858474,108058407,107858474,
  96201818,96212481,109458596,113356471,113376314,96216779,109448144,
  96216779,109457598,110149531,107680279,110149531,96201818,113361144,
  107679529,96217154,109589807,107544718,113356927,109596605,107544718,
  113363725,107687275,107544718,108242907,109589311,107544718,96212566,
  109596605,107544718,113363850,109593818,96201322,96216698,109596605,
  96204109,96219485,109040338,108897842,109765098,107687275,108058407,
  107434279,109589311,96197315,96212566,109586028,107679529,113353273,
  107544799,107687194,96216698,107544799,96201322,96216698,107541520,
  109458221,96219485,107551597,96194032,96209408,108052155,109457598,
  109765098,108052155,108897842,109765098,109451342,108058407,
  107434279,109451342,108240775,107434279,107549306,96197315,96212566,
  107549306,109451302,96212566,107541520,107690106,96219860,107541520,
  96204609,96219860,109593818,96197311,96216698,109596605,109448144,
  96219485,109040338,108240775,109765098,107687275,109457598,107434279,
  109589311,113376310,96212566,109586028,96204609,113353273,113376314,
  107544718,96212606,109448144,107544718,96212606,108897842,107544718,
  107858474,96201818,107544718,96212481,107679529,107544718,113356471,
  109589807,96197311,107544718,96212687,109596605,96204109,107544718,
  96219485,107687275,108240775,107544718,108242907,109589311,96197315,
  107544718,96212566,109596605,96204609,107544718,96219860,77132311,
  115260147,96262826,96255536,140067314,92406362,113237930,113240717,
  109807346,140067395,107392279,140067395,96204109,92403656,113369024,
  92403656,107698559,92403531,109424682,92403531,96194032,113238011,
  113379101,113238011,109593818,95953198,109596605,115263345,109593818,
  115263470,109596605,115263470,96197311,77132230,96204109,115263345,
  113376314,115263470,109427469,96258734,140097899,95953279,96201403,
  115260147,109424763,115267562,96201403,115267562,109424763,115260272,
  107702651,115260272,77040718,95953279,113372222,115260147,109420590,
  115267562,107698478,115267562,109420590,115260272,107698478,
  115260272,140097899,113620346,96201403,92406362,109424763,92403450,
  96201403,92403450,109424763,92406237,107702651,92406237,96197230,
  113620346,113372222,92406362,109420590,92403450,107698478,92403450,
  115171214,92406237,109420590,92406237,109807427,109593818,77132230,
  96201403,109596605,115263345,109424763,109593818,115263470,107702651,
  109593818,115263470,109424763,109596605,115263470,107702651,
  109596605,115263470,107548891,92403450,107548891,113230640,109589726,
  92403450,109589726,113230640,107544799,115267562,107551597,96255536,
  113372303,115267643,96194032,96262907,96201322,92399358,113372303,
  92399358,96194032,113233838,109417392,113233838,107548891,109424763,
  92403450,107548891,107702651,92396160,109589726,109424763,92403450,
  109589726,107702651,113233919,109589726,109424763,92396160,109589726,
  115175387,92396160,107548891,107544718,92403450,107548891,107544718,
  113230640,109420590,107548891,92403450,107698478,107548891,113230640,
  107544799,109424763,115267562,107548810,96201403,115263551,107551597,
  109424763,115260272,107551597,107702651,96255536,96201322,107548891,
  115263470,96194032,107548891,96258734,107548891,107544718,109424763,
  92403450,107548891,107544718,107702651,92396160,107683183,113363692,
  109448144,113363692,96194153,113363692,109424673,92395077,115179274,
  92395077,107702561,113240649,115179274,96255601,107702561,96255601,
  109589599,96219823,109589726,96209441,107548645,113353310,107544802,
  107544718,96209407,107541520,107544718,96216698,107544799,107544718,
  113363725,107551597,107544718,113360567,113372222,107544718,
  107690319,109451302,107544718,96204448,96194032,107544718,109458188,
  107689981,107544718,96194065,107683183,107544718,113353648,109458098,
  107544718,113360567,113368778,107544718,107690319,113372305,
  107544718,113363602,109455434,109589599,113353310,96194032,107548891,
  113363692,107679904,109589726,113363692,113379101,107548645,
  113353310,96197559,107548645,113363571,96194032,109451218,107544718,
  96204448,109451423,107541520,107544718,113356927,113376314,109451342,
  107544718,113379068,113369024,109451342,107544718,113369057,
  113376066,107551597,107544718,113360567,107687315,113372222,
  107544718,107690319,107680027,113372222,107544718,107690319,
  113363725,107551564,113360567,107541305,96212606,107551564,113356723,
  107541305,107551597,96216779,96219452,107551597,113360650,113353310,
  107687194,96216698,107541553,107689981,107689948,96212606,113376066,
  113360567,107541305,107690350,107690319,96212975,96197311,107541553,
  113356846,113372305,113356723,107541305,109448144,113372222,96212606,
  113353681,113376066,107551597,107541305,113363571,113240684,96255569,
  109417425,113233838,107695313,113233838,92434283,113240684,107702651,
  113230673,107544718,113240684,107548810,113240684,107695280,
  113240684,113379101,92406204,109589807,113240684,92434283,96255569,
  107702651,96265580,107548810,96255569,107551597,115260305,107695280,
  96255569,113379101,115260305,107695280,109589726,113233919,109427469,
  109589726,92399439,115175306,109589726,113240717,92430191,109589726,
  113240717,107695280,107548810,96258815,109427469,107548810,96258815,
  96197311,107541520,96265613,113376314,107541520,96265613,109417425,
  96258734,107544718,92434283,113240684,107548810,92434283,113240684,
  107551597,107702651,113240684,109589807,92434283,113240684,109596605,
  107702651,113240684,107548810,107544718,113240684,107695280,
  107544718,113240684,107548810,92434283,96255569,107551597,92434283,
  96255569,107548810,107702651,96255569,107551597,107702651,96255569,
  107695280,115178060,96258734,92434202,109427436,115263470,92434283,
  113233919,109586561,107544718,115258570,111448173,109589599,
  115271556,109589726,113394487,92425851,115258570,92438787,115258570,
  111503229,96127239,107671827,96127239,113368651,92425851,96255601,
  96197299,109472131,98117181,113229430,109585693,96117135,109586511,
  113229430,107552556,111447007,98119230,113240094,109585693,98008383,
  111454395,96194015,111454395,96255911,109585693,111503239,111454395,
  107674615,111454395,115166826,113229430,109585693,92438297,113240028,
  113237634,109472131,111455580,109595084,113379101,111455580,
  109595084,109466787,111455580,109595084,113240094,107552556,
  107664511,113387598,111447024,107542669,115166826,113229430,
  107552556,113372291,96125708,107542669,113369024,96125708,107542669,
  115175010,92406362,109585693,107671899,96118242,109595084,107671899,
  96124451,109595084,111500523,96124451,109595084,92430485,92406362,
  109585693,107541520,113369007,111454395,107542610,113369007,
  111454395,96197230,111447024,109595084,107544787,109463503,96124523,
  92430485,115260147,109585693,107541520,109473607,111454395,107542610,
  109473607,111454395,98011598,113387667,109595084,115175010,115263434,
  107552556,98015771,113384400,107542669,109586528,107665677,98119230,
  113376395,98126109,107551607,111454395,109596615,98119230,109596615,
  98124643,109596615,111457101,109596615,109472131,111454395,109596615,
  113376323,111454395,109596615,113379111,96120350,111494301,96120350,
  98124643,109596615,107544718,109472131,98119230,109596615,109472131,
  113385490,109596615,113372291,98123331,109587677,109472131,96117152,
  109596615,113372291,111448114,109596615,109472131,96125763,109596615,
  107544718,111454272,134238902,82620313,95953403,107683183,109451423,
  140067395,107885303,134238899,78792039,134238885,107885303,140067395,
  69768323,139744251,77133431,107683172,107548895,98119353,134238902,
  82620313,113620222,107548891,107683183,77132230,107885303,134238899,
  140268822,134238885,82620289,77132230,69768323,139744251,77148730,
  107683172,107548895,78837817,78792061,107885304,82620313,140097899,
  140067395,109451423,107683183,78837807,138175775,107885303,82620303,
  78837795,76931296,134238885,82620289,113376395,113620427,69768323,
  113371807,96201407,77133431,107683172,107548895,138362305,96124154,
  107885304,82620313,96197230,140050903,107683183,107548891,111496722,
  113620427,82620303,134238899,138362323,140067384,134238885,82620289,
  96197230,140095295,69768323,113371807,96197230,77133431,107683172,
  107548895,98015402,138408061,82620313,107885304,109807427,113112938,
  107683183,107548891,140097899,78962842,82620303,107885303,98015394,
  113387972,82620289,107885303,140097899,77043322,113371807,69768323,
  113376395,95953206,109451414,107683172,113620303,107548891,109451423,
  77132311,82620303,134238899,140268890,82620289,134238885,77132311,
  113371807,139744251,113620291,109451414,107683172,113112814,
  107548891,107683183,140067314,134238899,82620303,96124079,134238885,
  107885303,140067314,139744251,113371807,95953331,107548895,107683172,
  77040799,77147687,109451423,107683183,138362395,113620427,107885303,
  82620303,138362391,140067384,134238885,82620289,96197311,140095295,
  69768323,113371807,96197303,77133431,107683172,107548895,109807346,
  140050903,107548891,109451423,78837726,113620427,107885303,82620303,
  78837728,140067384,134238885,82620289,113376314,140095295,69768323,
  113371807,113376319,77133431,107683172,107548895,113112814,109451423,
  109455434,107544718,140067314,82620303,82899222,107544718,78791972,
  82620289,109314322,107544718,109804494,113371807,77455870,107544718,
  95953331,109451414,109455442,107544718,77179102,140051938,109451423,
  107548891,98015318,111252690,107885303,82620303,107671705,140268822,
  82620289,134238885,109807346,107395546,113371807,139744251,113376319,
  95953206,109451414,107683172,109807427,113113019,107548891,109451423,
  109807427,138408151,82620303,107885303,140097888,77132306,82620289,
  134238885,69554795,96520207,139744251,69768323,96201407,77148806,
  109451414,107548895,139959434,77148803,107548891,107683183,109466842,
  138408151,82620303,107885303,111496725,77132306,82620289,134238885,
  107392198,96520207,139744251,69768323,96197230,77148806,109451414,
  107548895,109807427,113112814,107548891,109451423,107671775,78791970,
  82620303,107885303,109807427,111454198,134238885,107885303,69554795,
  109804494,139744251,69768323,96201407,113620343,107683172,107548895,
  77040718,113112814,107683183,109451423,109466842,78791970,107885303,
  82620303,77040726,96124079,134238885,107885303,147583822,109804494,
  69768323,139744251,113372218,113620343,107548895,107683172,96201403,
  140052019,107683183,109589726,107544718,109807427,140268895,82620303,
  109314322,107544718,109807427,140268890,82620289,109314322,107544718,
  109807427,147585887,113371807,147431302,107544718,96201407,140052011,
  107683172,109589722,107544718,27576557,96204109,27576557,158869959,
  182585867,108225274,158869959,108913343,111702976,182259101,
  182585867,181755521,113369397,181755521,47934243,111455580,44981181,
  138667762,158871959,96125708,155826758,98117181,159716768,98117181,
  77548170,159720646,96117135,33044800,111448420,138667762,113369397,
  47934243,111455580,109472131,27053511,96125708,98011667,140650523,
  111447007,107884306,155073341,111455580,109315317,155073341,
  111455580,159717639,111454395,96125708,140651645,111454395,96117135,
  137670403,79424159,113394487,109472131,44074618,98117181,112759425,
  98117181,32804382,182258855,98117181,111454395,140651523,113385549,
  96124523,33322950,27464439,138667762,32804382,109807427,95553448,
  111455580,44977972,113376395,182258855,96125708,111454395,109470891,
  27315024,96125708,111454395,107392198,77127802,138667762,32804382,
  27466552,26959129,138667762,155073341,111496350,159717506,96125708,
  111454395,113372222,77548542,96125708,111454395,107667795,107393259,
  113394487,155073341,159717763,159716893,98117181,111454395,76487218,
  76487226,98126119,111454395,44074867,98117181,96202643,159717885,
  139544319,159717885,109466787,140651399,98117181,159717763,107548891,
  98117181,44073872,96117135,140651399,96202643,159717885,140651520,
  98116015,107544718,159717763,44982048,111447007,109472131,77547424,
  96117135,109472131,139544451,113384383,107544718,182258855,98119230,
  109596615,113376395,44073997,98117181,111454395,109470891,27053757,
  113385549,96124523,113376395,182258855,98123403,109596615,182585006,
  180336730,26926245,180336730,1129611,113625044,106992518,113625044,
  140071823,182585867,108684957,27560102,180336730,140067395,140651399,
  182259101,112502653,110145677,110138347,108689421,138729274,
  158885580,140651645,181136653,113951609,181138391,182416742,76905711,
  182524859,210345466,181136407,107399674,29236895,140067395,140651399,
  182259101,95553518,109811855,113379101,140651399,159706391,113154150,
  76486480,210345466,27560102,27314770,27315149,139405819,73912854,
  12062103,107548891,76486481,73225567,3861162,109448144,181751447,
  179843991,3861162,182259101,109589726,96209441,106999650,73225567,
  12062103,108899105,139405819,96209441,114137949,73912854,12062103,
  108731107,143225515,12062103,113372303,107548891,181751447,205138627,
  73225567,3861162,113379101,107548891,27822178,185854767,73225567,
  3861162,76487218,107548891,27822178,106999650,73225567,3861162,
  109448177,27315149,96194032,113117692,139405819,107683183,77732807,
  96209441,107548891,199402399,72509660,109807335,24008150,143225515,
  109807335,27314032,107687194,109455434,140651266,106999650,185854767,
  73225567,12062103,113376314,140067395,27315149,96209441,179843991,
  114137949,73912854,12062103,180004943,108731107,22927425,143225515,
  109455434,109458221,109589726,76487596,185854767,205138627,73225567,
  3861162,109596605,109451423,109589726,27822178,109589807,113379101,
  109589726,140650529,109807427,185854767,73225567,3861162,79083823,
  107392292,73225567,3861162,107551597,107689948,181751692,113369024,
  107544799,139405943,96219452,109589726,109466843,185839514,199417652,
  108433328,144126578,23095197,185564992,73225567,181751438,109596572,
  113363692,199402399,110324711,144659217,182043605,27314032,113379101,
  107548891,96209441,114137949,106999650,185854767,73225567,12062103,
  144666519,11487648,144126672,73225567,12062103,109586528,139405943,
  96212606,109586561,109807427,3861152,179996524,78794035,109811846,
  109589726,113379101,181751692,76487218,109463711,110138719,23657354,
  72509660,199066843,140830695,143913050,199066843,143225515,199961357,
  108901934,27606937,96194032,76487218,109455434,139405819,79083823,
  114137949,106999650,185854767,73225567,12062103,109596605,24003722,
  143913050,12351902,108735549,199763058,27604936,27607028,77732683,
  27822556,109451423,27821441,205138627,114137949,106999650,185854767,
  73225567,12062103,205138627,199424831,11487648,144126672,143913050,
  199417652,77179183,140050822,109589726,96204109,76487351,27822556,
  109807427,107663072,106999650,185854767,72509660,199066843,109314415,
  111454554,143913050,23657354,72509660,23095174,73912854,139420588,
  138939322,139420588,180826528,73912854,12062103,73912854,179843991,
  139420588,110685804,73912854,12062103,205138627,180826528,73912854,
  12062103,182786209,73912854,139420588,96782940,23095174,12062103,
  73225567,205138627,113123150,73912854,12062103,29515599,180826528,
  73912854,12062103,179843991,182786209,73912854,139420588,205138627,
  3912460,23095174,12062103,73225567,114137949,138139576,106999650,
  12062103,73225567,199740636,114137949,106999650,185854767,12062103,
  73225567,180826569,22934718,12351902,143913050,199763058,73072955,
  205138627,207368000,5756963,106999650,12062103,73225567,109807427,
  205138627,207368000,5756963,106999650,12062103,73225567,109593804,
  76856198,28365006,140097940,219263013,160405546,179629517,132440821,
  82765556,138362323,153690461,181703188,181873564,200523788,50162752,
  174171184,44448336,107689948,143613617,41658462,79670051,39631319,
  210471581,70783101,182259101,182045573,26743634,182258731,140651399,
  181797699,153692231,31588701,115178093,87498568,86161352,51024595,
  110148670,234995099,73225567,113356927,110944135,109807427,98015771,
  107671899,96202643,83119279,111362264,58517558,109593818,109597867,
  109593918,109417392,109416331,109420671,113369024,113372303,
  113367963,107679904,107678843,107683183,96212606,107679904,107683183,
  107678843,107695280,107694219,107698559,107695280,107694219,
  107698559,120860334,88208556,109594026,107549262,209084286,113625101,
  109593909,109593818,76487351,78440103,82191847,113361019,113379101,
  76487351,78440103,84098471,115267643,107698569,140651399,142601998,
  109589726,109586065,109593917,109455805,109586065,109593917,96201818,
  109586065,109593917,113371807,110145677,109597867,107687194,
  110145677,109597867,109451423,109427469,109428650,109424682,
  109427469,109428650,109424682,101982779,109458221,109459402,
  109455434,109458221,109459402,109455434,113361019,96204109,96205290,
  96201322,107689981,107687194,107691162,107689981,107691162,107687194,
  96216779,109596605,109586593,109596572,113379101,115178093,107689981,
  109596605,109586593,109596572,113379101,115178093,107689981,
  140651399,182259101,109596605,109586593,109586561,107705357,
  107706538,107702570,107705357,107706538,107702570,120864507,17686571,
  174188104,109594513,53210107,107548891,109589726,109594513,53210107,
  107548891,140651399,138145270,174785400,32821756,138145270,174785400,
  82620291,32821756,109589311,109593917,109586065,109589683,115179274,
  107683183,109593915,113379101,109624650,107544718,115168734,
  113368651,109589683,115179274,107683183,109593915,113379101,90066506,
  115168734,113368651,139959515,35516804,47444107,109594397,107548891,
  140650529,109599231,109593909,107702570,120858726,109599231,
  109593909,107698558,120869842,109599231,109593909,109420671,
  109589116,109430715,109599975,109599231,109593909,109420671,
  101988104,109599479,109593909,109455434,109599479,109593909,
  107683183,109599479,109593909,109451426,109599603,109593909,
  107687191,96212605,109599603,109593909,107683184,96216782,109599603,
  109593909,109451426,109599603,109593909,109451426,113361020,
  107687276,109609275,121033638,109599355,109593909,107683184,
  230601192,55191886,107687276,109609275,121033638,109599355,109593909,
  107683184,107687194,109589725,128752393,103766397,105888288,
  119117005,130397624,122786500,101988148,109593905,110193563,
  109594519,109855291,109417392,109416331,109420671,109589726,
  109593905,110193563,109594519,109855291,107705357,107706538,
  107702570,107548891,109593915,109599479,109455434,113379101,
  109593915,109599479,109451302,109455434,109593915,109599479,
  109451302,113379101,109593918,109597867,96201322,109593918,109597867,
  113372303];

CR_4.codedIsomorphismTypeQClass :=
  [101,102,102,102,104,102,104,104,104,104,109,104,109,109,109,
  122,205,205,210,412,412,412,625,103,107,208,208,319,107,107,
  117,319,319,319,640,205,103,107,205,210,412,412,625,210,210,
  412,412,223,625,625,625,625,849,107,107,208,117,319,319,319,
  319,319,640,117,117,117,319,319,640,640,136,640,640,640,1561,
  412,208,319,210,927,927,625,3352,1028,324,1450,3600,3453,
  15469,218,218,420,741,237,438,1246,438,741,438,1246,1145,1145,
  842,1662,3867,3867,660,2565,3867,2464,678,107,117,319,640,114,
  132,333,333,434,555,957,1358,1358,1358,3174,132,154,555,555,
  957,555,1170,1771,3174,3174,682,521,1044,1548,1548,3666,1044,
  1044,1548,1548,2263,3666,3666,3666,3666,3666,577,311,1230,106,
  115,216,335,218,1246,333,555,1358,1459,3174,3475,4776,4776,
  481,420,741,438,1145,656,3867,2572,4300,3300,200,300,500,284,
  500,1000,1368,179,179,280,183,513,1129,1331,826,1447,4400,
  4700,3151,4600,4200,4900,26100,25000,25900,25200,100,100,100,
  200,300,185,539,943,1447,4700,3500,4900,2873,200,300,400,100,
  400,100,100,200,186];

CR_4.codedNormalizerZClass :=
  [767000,767000,774000,812000,775000,811000,774000,812000,783000,
  810000,794000,784000,809000,795000,782000,787000,803000,799000,
  815000,806000,778000,776000,804000,803000,800000,814000,807000,
  762000,765000,802000,798000,813000,805000,779000,777000,804000,
  801000,815000,808000,748507,738563,739242,243,740564,747244,
  718565,243,722566,752244,757246,745245,719567,733685,691,378,
  740564,734693,680,723566,758379,727692,738563,243,735242,740564,
  747244,718565,243,723566,752244,757246,744245,719567,738563,243,
  739242,747244,740564,729565,243,752244,723566,715245,743246,
  756567,691,378,740564,734693,680,723566,758379,727692,785000,
  793000,785000,793000,785000,793000,763000,761000,771000,772000,
  763000,771000,781000,773000,761000,771000,759000,785000,759000,
  785000,816000,776000,786000,817000,760000,764000,816000,776000,
  780000,785000,785000,785000,776000,760000,776000,780000,776000,
  768000,769000,769000,173,242,243,244,244,245,246,359,378,378,
  244,728379,750379,173,242,242,243,243,244,244,244,244,245,245,
  246,246,173,242,242,243,243,244,244,244,244,245,245,246,246,
  359,378,378,378,378,244,244,728379,728379,750379,750379,242,
  243,244,244,245,246,242,243,244,244,245,246,242,243,244,244,
  245,246,242,243,244,244,245,246,378,378,244,728379,724379,242,
  243,244,244,245,246,242,242,243,243,244,244,244,244,245,245,
  246,246,242,243,244,244,245,246,378,378,244,730379,724379,378,
  378,244,728379,724379,295,296,329,330,295,296,329,330,295,295,
  296,296,329,329,330,330,295,296,329,330,295,296,329,330,295,
  296,329,329,330,330,295,296,329,329,330,330,295,296,329,329,
  330,330,295,296,329,329,330,330,295,296,329,329,330,330,329,
  330,419,419,419,419,329,330,419,419,419,419,329,330,419,419,
  419,419,419,419,329,330,419,419,419,419,419,419,419,419,
  770000,797000,766000,770000,770000,789000,770000,790000,751671,
  680,714681,359,378,378,379,379,751671,680,378,680,713681,379,
  714681,751671,680,680,714681,713681,751671,680,378,680,713681,
  379,713681,378,379,680,737681,378,379,378,378,379,379,680,
  737681,680,713681,419,419,419,419,419,419,419,419,419,419,419,
  419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,
  419,419,419,419,419,419,419,419,419,419,419,419,419,419,428,
  477,731613,617,428,428,429,755429,732613,753613,741604,621,
  717604,621,464,482,482,464,482,482,742604,721604,621,621,482,
  464,482,482,726604,621,621,746604,621,482,621,464,482,482,482,
  482,716604,621,482,621,725604,621,621,482,482,621,482,482,482,
  482,482,482,482,621,482,482,482,482,621,507,563,564,565,566,
  567,507,563,564,565,566,567,507,563,564,565,566,567,507,563,
  564,565,566,567,507,563,564,565,566,567,563,564,565,566,567,
  563,564,565,566,567,563,564,565,566,567,563,564,565,566,567,
  563,564,565,566,567,563,564,565,566,567,563,564,565,566,567,
  563,564,565,566,567,563,564,565,566,567,563,564,565,566,567,
  563,564,565,566,567,796000,796000,792000,792000,791000,792000,
  791000,788000,788000,591,591,592,591,617,604,604,591,606,605,
  604,604,606,605,604,621,604,621,621,604,604,605,606,604,604,
  605,606,604,621,621,617,613,613,754613,617,617,613,617,617,
  621,621,621,621,621,621,720626,720626,711627,711627,626,627,
  636,637,636,637,636,637,636,637,636,637,688,709,665,666,649,
  650,665,752705,662,749704,749704,665,666,680,681,665,666,671,
  736680,680,712681,712681,691,710,662,663,664,680,681,680,680,
  681,681,680,691,692,693,680,712681,691,710,710,680,681,691,692,
  693,691,710,710,691,693,712692,691,692,693,704,697,709,697,
  752705,702,704,709,752705,752705,704,705,710,710,710,710,710];

CR_4.codedPresentationQClass :=
  [11,21,21,21,202,21,202,202,202,202,63,202,63,63,63,34,601,
  601,732,742,742,742,693,401,971,462,462,1072,971,971,1062,
  1072,1072,1072,1043,601,401,971,601,732,742,742,693,732,732,
  742,742,673,723,723,723,693,654,971,971,462,1062,1072,1072,
  1072,1072,1072,1023,1062,1062,1062,1072,1072,1043,1043,993,
  1023,1043,1023,984,742,462,1072,732,683,713,693,644,902,892,
  843,863,853,834,1331,1331,1082,1412,1402,1422,1432,1422,1412,
  1422,1432,1013,1003,1122,1363,1373,1373,1343,1353,1373,1113,
  354,971,1062,1072,1053,502,1102,562,562,473,1202,1093,513,513,
  513,1143,1102,1192,1202,1202,1093,1202,393,1133,1163,1153,374,
  133,183,104,94,174,193,183,94,94,54,174,164,154,154,144,45,
  1211,1292,941,1301,952,1312,1331,1432,562,1202,523,493,1163,
  553,484,484,544,1082,1412,1422,1033,592,1383,383,573,583,364,
  1183,534,1174,962,1322,114,923,913,124,933,822,1282,1272,703,
  793,1263,1243,1253,343,664,764,1234,1224,334,883,635,874,275,
  626,616,266,1462,1472,783,1393,813,754,1453,324,804,774,1444,
  285,315,256,306,297];

CR_4.codedPropertiesFamily :=
  [10155,7255,6355,5655,4955,4266,4266,4199,4199,3666,3466,3399,
  3299,2399,2199,2399,2688,2119,2119,2119,1201,1201,1201];

CR_4.codedPropertiesZClass :=
  [114,114,814,423,214,123,1614,423,414,223,132,1614,423,132,
  6414,1623,1633,1643,452,863,3214,823,833,833,843,252,463,1614,
  423,433,443,152,263,25614,3223,3233,3243,452,863,112,3224,833,
  833,843,843,852,263,473,473,282,282,492,112,25624,3233,3243,
  3252,463,873,482,892,51224,6433,6433,6443,6443,6452,863,1673,
  1673,882,882,892,25624,3233,3233,3243,3243,3252,463,873,873,
  482,482,492,409624,25633,25643,25652,1663,3273,1682,892,114,
  122,1614,822,814,422,814,814,422,422,3214,822,3214,1622,6414,
  1622,313,924,113,124,413,424,424,313,924,924,413,424,424,
  3624,124,424,1624,3624,424,424,1624,114,114,114,112,424,233,
  443,243,252,262,112,824,433,443,452,462,212,1624,1624,833,
  833,843,843,843,843,852,452,462,862,112,1624,1624,433,433,
  843,843,443,443,452,452,262,462,212,6424,6424,1633,1633,1643,
  1643,1652,852,462,1662,3224,833,1643,843,852,462,824,233,443,
  443,252,262,824,233,443,443,252,262,3224,833,843,1643,852,
  462,6424,833,1643,852,462,12824,1633,3243,3243,1652,862,6424,
  6424,833,833,1643,1643,1643,1643,852,852,462,462,12824,1633,
  3243,1643,1652,462,6424,833,1643,852,462,51224,3233,6443,3252,
  862,613,322,634,343,213,122,634,343,613,213,322,122,634,634,
  343,343,413,122,434,143,413,122,434,143,813,222,834,834,243,
  243,1213,322,1234,1234,343,343,813,222,834,834,243,243,413,
  122,1234,1234,343,343,1613,222,1634,1634,243,243,2434,643,434,
  143,434,143,2434,643,434,434,143,143,3234,443,1634,1634,243,
  243,1634,243,4834,643,1634,1634,243,243,1634,243,6434,443,414,
  424,132,114,114,124,114,124,112,424,432,212,824,1624,432,832,
  212,424,824,1624,432,232,832,212,1624,1624,232,1632,412,1624,
  3224,6424,832,432,3232,424,232,424,232,1624,432,1624,1624,432,
  432,1624,432,6424,832,114,114,114,114,214,214,214,214,214,
  214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
  214,214,414,414,414,414,414,414,414,414,414,414,414,414,414,
  814,112,134,112,134,112,112,134,134,112,134,322,934,122,134,
  122,134,334,322,934,334,322,122,134,934,334,122,134,134,122,
  134,134,122,134,134,134,122,134,134,334,334,322,934,334,134,
  122,134,134,134,334,134,334,134,134,334,134,334,134,134,134,
  334,134,134,134,312,624,634,642,354,362,112,424,234,242,254,
  262,212,424,434,442,454,462,312,1224,634,642,654,662,212,824,
  434,442,854,862,2424,1234,1242,1254,662,424,234,242,254,162,
  824,434,442,454,262,624,634,342,654,362,1624,434,442,854,262,
  824,434,242,854,262,1624,834,442,1654,462,2424,1234,642,2454,
  662,824,434,242,854,262,1624,434,442,854,262,3224,834,442,
  3254,462,111,211,111,111,111,111,111,111,111,111,311,321,111,
  121,111,311,111,121,321,311,111,121,321,111,121,111,121,121,
  111,111,121,121,111,311,321,121,111,121,121,121,121,121,121,
  121,121,121,121,121,121,121,121,121,121,121,111,111,121,121,
  111,121,311,321,111,121,311,321,111,121,111,121,111,421,211,
  221,211,221,211,1621,111,121,121,411,421,411,421,211,421,211,
  411,411,821,821,411,6421,211,121,121,411,821,411,811,821,421,
  411,811,1621,3221,411,421,111,421,121,811,821,211,121,221,
  211,421,421,211,221,121,411,221,221,121,121,421,121,421,221,
  121,421,221,221,121,221,121,121,121,121,121];

CR_4.columnGeneratorSpaceGroup :=
  [[0,0,0,0,1],[0,0,0,1,2],[0,0,0,1,3],[0,0,0,1,4],[0,0,1,0,2],
  [0,0,1,0,3],[0,0,1,1,2],[0,0,1,1,3],[0,0,1,1,4],[0,0,1,2,3],
  [0,0,2,0,3],[0,0,2,1,3],[0,0,2,1,4],[0,0,2,2,3],[0,0,3,1,4],
  [0,1,0,0,2],[0,1,0,0,3],[0,1,0,0,4],[0,1,0,0,6],[0,1,0,1,2],
  [0,1,0,1,3],[0,1,0,1,4],[0,1,0,2,4],[0,1,1,0,2],[0,1,1,0,3],
  [0,1,1,0,4],[0,1,1,0,6],[0,1,1,1,2],[0,1,1,1,3],[0,1,2,0,4],
  [0,1,2,3,4],[0,1,3,2,4],[0,2,0,0,3],[0,2,0,1,3],[0,2,0,1,4],
  [0,2,1,0,3],[0,2,1,2,3],[0,3,0,1,4],[0,3,1,0,6],[0,3,2,1,4],
  [0,3,3,2,4],[0,5,0,5,6],[1,0,0,0,2],[1,0,0,0,3],[1,0,0,0,4],
  [1,0,0,0,6],[1,0,0,1,2],[1,0,0,2,3],[1,0,0,3,6],[1,0,1,0,2],
  [1,0,1,1,2],[1,0,2,0,3],[1,0,2,0,4],[1,0,3,0,6],[1,1,0,0,2],
  [1,1,0,0,3],[1,1,0,0,4],[1,1,0,0,6],[1,1,0,1,2],[1,1,0,1,3],
  [1,1,0,2,3],[1,1,1,0,2],[1,1,1,0,3],[1,1,1,1,2],[1,1,2,0,3],
  [1,1,2,0,4],[1,2,0,0,3],[1,2,0,0,4],[1,2,0,1,3],[1,2,1,1,3],
  [1,2,1,2,3],[1,2,2,0,4],[1,2,2,1,3],[1,3,0,0,6],[1,3,0,3,6],
  [1,3,3,0,6],[2,0,0,0,3],[2,0,0,1,3],[2,0,0,3,6],[2,0,1,0,3],
  [2,0,1,1,3],[2,0,2,2,3],[2,0,3,0,6],[2,1,0,0,3],[2,1,0,0,4],
  [2,1,1,2,3],[2,1,2,0,3],[2,1,2,1,3],[2,1,5,2,6],[2,2,1,1,3],
  [2,3,0,0,6],[2,3,0,3,6],[2,3,3,0,6],[3,0,1,5,6],[3,1,0,0,6],
  [3,2,0,0,6],[3,5,5,0,6],[4,3,3,0,12],[5,2,5,3,6],[5,3,3,0,6]];

CR_4.crystalSystemQClass :=
  [1,1,2,2,2,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7,7,7,8,8,
  8,8,8,9,9,9,9,9,9,9,10,11,11,12,12,12,12,12,13,13,13,
  13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,15,15,
  15,15,15,15,15,15,15,15,15,15,16,17,17,18,18,18,18,18,19,
  19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
  20,20,20,20,20,20,20,20,21,21,21,21,22,22,22,22,22,22,22,
  22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,
  24,25,25,25,25,25,25,25,25,25,25,25,26,26,27,27,27,27,28,
  28,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,
  30,30,30,30,31,31,31,31,31,31,31,32,32,32,32,32,32,32,32,
  32,32,32,32,32,32,32,32,32,32,32,32,32,33,33,33,33,33,33,
  33,33,33,33,33,33,33,33,33,33];

CR_4.dimension := 4;

CR_4.familyCrystalSystem :=
  [1,2,3,4,5,5,6,7,7,8,9,10,10,11,11,12,13,14,14,15,16,
  16,16,17,17,18,19,20,21,21,22,23,23];

CR_4.fixedPointFreeSpaceGroup :=
  BlistList( [ 1 .. 4783 ],
  [1,4,6,8,17,19,33,34,37,38,40,44,48,55,56,61,70,79,82,83,
  87,95,122,242,243,244,245,251,257,267,271,279,389,393,397,
  411,412,414,429,430,431,440,669,692,1239,1242,1325,1327,1349,
  1378,1381,1383,1388,1451,1494,1533,1741,1744,1771,1851,1857,
  1860,1886,3047,3053,3062,3070,3079,3083,3286,3314,4030,4038,4139] );

CR_4.GLZ := GLZ4;

CR_4.hQClass :=
  BlistList( [1..227],
  [2,5,7,11,13,16,23,28,35,36,38,43,53,63,75,76,78,83,89,
  111,115,126,137,142,153,155,159,161,170,183,190,211,227] );

CR_4.modulSp := 100;

CR_4.modulZ := 124;

CR_4.nameCrystalFamily :=
  ["hexaclinic","triclinic","diclinic","monoclinic","orthogonal",
  "tetragonal monoclinic","hexagonal monoclinic","ditetragonal diclinic",
  "dihexagonal diclinic","tetragonal orthogonal","hexagonal orthogonal",
  "ditetragonal monoclinic","dihexagonal monoclinic",
  "ditetragonal orthogonal","hexagonal tetragonal","dihexagonal orthogonal",
  "cubic orthogonal","octagonal","decagonal","dodecagonal",
  "di-isohexagonal orthogonal","icosahedral","hypercubic"];

CR_4.nullDadeGroupsZClass :=
  [0,9,18,22,37,41,56,60,75,79,91,107,110,117,127,129,133,
  140,144,154,158,160,166,173,180,185,199,204,206,210,217,221,
  231,235,237,241,248,252,262,266,276,277,279,282,284,287,288,
  294,296,299,300,301,302,307,308,310,312,313,316,318,319,320,
  321,324,326,328,331,332,338,340,343,344,345,346,347,350,352,
  355,357,358,364,367,369,370,371,372,373,375,377,378,381,383,
  384,385,387,390,392,395,397,400,402,404,407,410,412,415,417,
  420,422,425,433,435,443,445,453,455,457,465,467,469,477,479,
  481,483,485,487,489,491,493,495,497,500,503,506,515,516,519,
  521,523,524,525,531,532,534,536,537,538,547,548,549,552,555,
  557,559,561,563,564,565,566,567,576,577,578,581,584,586,588,
  590,592,593,594,595,596,602,603,604,606,608,610,612,613,614,
  615,616,617,620,622,624,625,626,627,630,632,634,635,636,637,
  640,642,644,645,646,647,650,652,654,655,656,657,659,661,662,
  663,664,667,669,671,672,673,674,675,678,681,683,685,687,689,
  690,691,692,693,694,697,699,701,702,703,704,706,708,709,710,
  711,713,715,716,717,720,725,726,729,732,737,738,741,744,747,
  752,757,758,759,762,765,768,773,774,777,780,785,786,789,792,
  797,798,799,802,805,808,813,814,815,818,821,824,829,830,831,
  834,837,840,845,846,847,850,853,856,861,862,863,866,869,870,
  873,874,876,877,879,880,883,884,885,887,889,890,893,894,895,
  897,899,900,902,903,906,907,908,910,912,913,915,916,918,920,
  922,925,927,929,934,936,940,942,943,944,947,948,949,950,951,
  953,954,955,956,957,958,959,961,962,963,964,965,967,968,969,
  970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,
  985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,
  1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,
  1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,
  1024,1025,1026,1027,1030,1031,1033,1034,1037,1040,1041,1042,
  1044,1045,1047,1048,1050,1051,1054,1055,1056,1059,1060,1061,
  1063,1065,1066,1067,1068,1071,1072,1073,1075,1076,1077,1079,
  1080,1081,1082,1085,1086,1087,1088,1089,1091,1092,1093,1094,
  1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,
  1108,1109,1110,1111,1112,1113,1114,1117,1118,1119,1120,1121,
  1122,1125,1126,1127,1128,1129,1130,1133,1134,1135,1136,1137,
  1138,1141,1142,1143,1144,1145,1146,1149,1150,1151,1152,1153,
  1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,
  1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,
  1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,
  1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,
  1202,1203,1204,1205,1206,1207,1208,1209,1211,1213,1215,1217,
  1219,1221,1223,1225,1227,1228,1229,1230,1231,1232,1233,1234,
  1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,
  1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,
  1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,
  1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,
  1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,
  1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,
  1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,
  1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,
  1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,
  1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,
  1355,1356,1357,1358,1359,1360,1361];

CR_4.nullGeneratorsZClass :=
  [0,1,2,3,4,5,6,8,10,11,12,13,15,17,19,21,23,25,27,29,31,
  33,35,37,39,41,43,45,47,49,51,53,55,57,60,63,66,69,72,75,
  77,79,81,83,85,87,89,91,93,95,97,99,101,104,107,110,113,
  116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,
  161,164,167,170,173,176,179,182,185,188,191,194,197,200,204,
  208,212,216,220,224,228,232,233,234,235,236,238,240,242,244,
  246,248,250,252,254,256,259,262,263,264,265,266,268,270,272,
  274,276,278,280,282,284,285,286,288,290,292,294,296,299,300,
  301,302,303,304,305,306,307,308,309,311,313,315,317,319,321,
  323,325,327,329,331,333,335,337,339,341,343,345,347,349,351,
  353,355,357,359,361,363,365,367,369,371,373,376,379,382,385,
  388,391,394,397,400,403,406,408,410,412,414,416,418,420,422,
  424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,
  454,457,460,463,466,469,472,475,478,481,484,487,490,493,496,
  499,502,505,508,511,514,517,520,523,526,529,532,535,538,541,
  544,547,550,553,556,560,564,568,572,576,577,578,579,580,581,
  582,583,584,586,588,590,592,594,596,598,600,602,604,606,608,
  610,612,614,616,618,620,622,624,626,628,630,632,634,636,638,
  640,642,644,646,648,650,652,654,656,658,660,662,664,667,670,
  673,676,679,682,684,686,688,690,692,694,696,698,700,702,704,
  706,709,712,715,718,721,724,727,730,733,736,739,742,745,748,
  751,754,758,762,764,766,768,770,772,774,776,778,780,782,784,
  787,790,793,796,799,802,805,808,811,814,817,820,823,826,829,
  832,835,839,843,847,851,855,859,863,865,867,869,871,874,877,
  880,883,886,889,892,895,899,903,904,905,907,909,911,913,915,
  917,919,921,923,925,927,929,931,933,935,938,941,944,947,950,
  953,956,959,961,964,967,970,973,976,979,982,985,988,991,994,
  997,1000,1004,1005,1006,1008,1010,1012,1014,1016,1018,1021,
  1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1047,
  1050,1053,1056,1059,1061,1063,1065,1068,1071,1074,1077,1080,
  1083,1086,1089,1092,1095,1098,1101,1104,1107,1110,1113,1116,
  1119,1122,1125,1127,1129,1131,1133,1136,1139,1141,1143,1146,
  1149,1152,1155,1158,1161,1165,1168,1171,1174,1177,1180,1183,
  1186,1189,1192,1195,1198,1201,1205,1209,1213,1217,1221,1225,
  1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273,
  1276,1279,1282,1285,1288,1291,1294,1297,1300,1303,1307,1311,
  1315,1319,1323,1327,1331,1335,1339,1343,1347,1351,1355,1359,
  1363,1367,1371,1375,1379,1383,1387,1391,1395,1399,1403,1407,
  1411,1415,1419,1423,1427,1431,1435,1439,1443,1447,1451,1455,
  1459,1463,1468,1473,1478,1483,1488,1489,1491,1492,1493,1495,
  1497,1499,1500,1502,1504,1506,1508,1510,1512,1515,1518,1521,
  1524,1527,1530,1533,1536,1539,1542,1545,1548,1551,1554,1558,
  1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1600,1602,
  1604,1607,1610,1612,1615,1618,1621,1624,1628,1631,1635,1639,
  1643,1645,1647,1649,1651,1653,1655,1659,1663,1666,1669,1672,
  1675,1679,1683,1686,1689,1691,1693,1695,1697,1699,1701,1704,
  1707,1710,1713,1716,1719,1722,1725,1728,1731,1734,1737,1740,
  1743,1746,1749,1753,1757,1761,1765,1769,1773,1777,1781,1785,
  1789,1793,1797,1801,1805,1809,1812,1815,1820,1825,1830,1834,
  1838,1843,1848,1853,1859,1865,1871,1877,1883,1889,1895,1901,
  1907,1909,1911,1914,1917,1920,1924,1927,1931,1935,1939,1943,
  1948,1953,1959,1965,1971,1978,1979,1980,1981,1982,1983,1984,
  1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,
  1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,
  2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,
  2021,2022,2023,2024,2025,2026,2029,2032,2035,2039,2042,2045,
  2049,2053,2056,2061,2066,2069,2072,2075,2078,2081,2084,2087,
  2091,2094,2098,2101,2104,2108,2114,2122,2125,2128,2132,2134,
  2138,2142,2145,2149,2152,2161,2169,2171,2175,2179,2183,2189,
  2193,2196,2199,2202,2206,2210,2213,2217,2225,2240,2248,2256,
  2260,2264,2268,2271,2274];

CR_4.nullQClass :=
  [0,2,5,7,11,13,16,23,28,35,36,38,43,53,63,75,76,78,83,89,
  111,115,126,137,142,153,155,159,161,170,183,190,211,227];

CR_4.nullSpaceGroup :=
  [0,1,2,4,6,8,9,13,15,17,19,20,23,26,27,40,44,56,63,66,
  71,87,91,99,105,111,113,116,122,124,128,131,132,134,180,188,
  212,226,229,234,235,245,251,257,261,267,271,273,275,279,281,
  283,285,286,305,319,329,335,338,342,345,348,452,488,528,548,
  584,600,606,614,626,632,638,642,702,722,746,770,780,790,794,
  802,806,810,814,816,1034,1122,1182,1201,1207,1223,1232,1235,
  1236,1237,1240,1244,1248,1251,1255,1259,1262,1265,1271,1275,
  1285,1294,1314,1323,1325,1327,1328,1329,1331,1333,1335,1337,
  1339,1341,1343,1345,1347,1351,1352,1354,1359,1363,1365,1367,
  1372,1373,1374,1375,1376,1379,1381,1384,1386,1388,1390,1391,
  1397,1401,1405,1408,1411,1413,1429,1445,1451,1457,1465,1473,
  1481,1489,1495,1499,1503,1509,1510,1522,1534,1538,1542,1548,
  1554,1558,1562,1566,1569,1571,1575,1577,1613,1653,1665,1674,
  1690,1706,1715,1721,1724,1733,1757,1763,1775,1783,1789,1793,
  1801,1803,1807,1811,1813,1815,1823,1825,1829,1833,1835,1837,
  1861,1867,1875,1887,1893,1897,1933,1939,1955,1961,1964,2092,
  2108,2140,2172,2188,2196,2260,2324,2332,2340,2356,2372,2388,
  2404,2412,2420,2424,2428,2524,2536,2560,2576,2588,2592,2628,
  2634,2650,2656,2659,2931,2955,3019,3039,3045,3049,3051,3055,
  3057,3059,3060,3064,3066,3070,3072,3074,3075,3079,3083,3085,
  3087,3091,3092,3096,3097,3101,3102,3106,3107,3115,3117,3125,
  3133,3135,3137,3145,3147,3155,3163,3165,3167,3175,3177,3185,
  3193,3195,3197,3201,3202,3210,3218,3220,3222,3238,3240,3256,
  3272,3274,3276,3292,3296,3299,3300,3303,3304,3320,3324,3327,
  3330,3331,3332,3364,3368,3378,3388,3390,3392,3402,3404,3436,
  3440,3450,3460,3462,3464,3474,3476,3512,3516,3518,3521,3522,
  3523,3524,3525,3526,3527,3528,3531,3534,3536,3542,3554,3557,
  3563,3565,3568,3574,3581,3584,3586,3591,3593,3600,3606,3608,
  3617,3620,3630,3654,3678,3684,3688,3702,3706,3708,3711,3713,
  3729,3733,3749,3765,3769,3773,3783,3787,3823,3829,3830,3831,
  3832,3833,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853,
  3855,3857,3859,3861,3863,3865,3867,3869,3871,3873,3875,3877,
  3881,3885,3889,3893,3897,3901,3905,3909,3913,3917,3921,3925,
  3929,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,
  3949,3952,3953,3954,3955,3956,3958,3960,3964,3966,3968,3969,
  3970,3973,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,
  3985,3986,3987,3988,3990,3992,3994,3997,3999,4000,4001,4002,
  4003,4004,4006,4007,4009,4010,4011,4013,4014,4016,4017,4018,
  4019,4021,4022,4023,4024,4026,4030,4034,4038,4040,4042,4043,
  4046,4048,4050,4052,4054,4056,4060,4064,4067,4071,4074,4076,
  4082,4086,4090,4094,4098,4100,4108,4112,4115,4123,4129,4141,
  4149,4155,4163,4167,4171,4173,4175,4177,4178,4184,4188,4191,
  4195,4197,4201,4205,4207,4211,4213,4225,4229,4232,4240,4242,
  4250,4254,4256,4264,4266,4282,4290,4294,4310,4314,4330,4338,
  4342,4358,4362,4370,4374,4376,4384,4386,4398,4402,4405,4413,
  4415,4447,4455,4459,4491,4495,4496,4498,4499,4500,4501,4502,
  4503,4504,4505,4506,4508,4510,4511,4512,4513,4515,4516,4517,
  4519,4521,4522,4523,4525,4526,4527,4528,4529,4530,4531,4532,
  4533,4534,4535,4537,4539,4540,4541,4542,4543,4544,4545,4546,
  4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,
  4559,4560,4561,4562,4563,4564,4566,4568,4569,4570,4572,4574,
  4575,4576,4577,4578,4579,4581,4583,4585,4587,4589,4591,4597,
  4598,4599,4600,4603,4607,4610,4614,4616,4620,4622,4625,4628,
  4634,4640,4642,4649,4651,4652,4653,4657,4663,4667,4673,4679,
  4683,4687,4691,4696,4706,4710,4714,4715,4717,4718,4726,4734,
  4736,4737,4739,4741,4743,4745,4747,4749,4750,4754,4756,4758,
  4759,4760,4762,4763,4766,4768,4769,4771,4773,4775,4776,4778,
  4779,4780,4781,4782,4783];

CR_4.nullZClass :=
  [0,1,2,4,6,8,11,14,20,27,33,39,52,61,73,85,93,95,97,99,
  103,105,107,109,111,113,116,119,122,123,124,125,126,127,129,
  130,131,132,133,140,146,159,172,183,189,195,201,207,212,218,
  230,236,241,246,250,254,262,266,270,276,282,288,294,300,302,
  304,306,308,312,314,318,320,322,326,328,330,333,336,338,341,
  346,353,358,365,367,369,371,375,377,379,380,381,383,385,386,
  387,389,390,392,394,396,400,404,405,406,408,410,411,412,416,
  418,419,421,423,427,429,431,433,436,439,444,447,450,454,459,
  463,467,468,469,470,471,473,475,476,477,479,481,482,488,494,
  500,506,512,517,522,527,532,537,542,547,552,557,562,567,568,
  569,570,571,573,574,575,576,579,581,586,590,592,595,599,603,
  606,607,608,609,611,612,613,614,615,616,617,618,620,621,625,
  627,629,631,633,635,637,639,641,643,645,648,650,652,654,659,
  661,664,666,670,674,676,679,681,684,687,690,693,694,695,696,
  697,698,699,700,701,702,703,704,705,706,708,709,710];

CR_4.orbitLengthSpaceGroup :=
  [7,3,1,1,7,7,3,3,1,6,9,2,1,2,6,6,1,6,6,3,6,6,12,3,6,
  6,3,6,2,1,2,1,2,1,2,1,1,1,1,4,2,2,4,2,1,2,1,2,2,2,
  1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,1,3,3,1,1,1,1,1,1,
  1,1,2,2,1,1,1,2,2,1,1,1,1,2,3,2,6,1,3,3,1,1,1,2,1,
  1,2,1,2,2,2,2,6,6,6,6,6,6,6,6,1,2,1,6,6,6,6,6,6,6,
  6,3,6,3,6,6,6,6,6,12,6,12,12,12,12,3,6,3,6,12,6,1,6,
  6,3,3,6,6,1,2,2,1,1,1,1,2,2,1,1,1,1,2,2,1,1,1,1,2,
  2,1,1,1,2,2,4,4,4,4,2,2,2,2,1,1,2,1,2,2,2,1,3,3,6,
  3,3,3,6,1,3,1,2,2,1,1,1,2,2,1,1,1,3,3,1,2,2,1,1,3,
  3,1,1,3,1,1,1,1,1,3,12,12,24,12,24,4,6,12,24,12,24,24,
  12,12,3,8,6,24,4,1,4,2,2,2,2,4,2,4,2,1,1,3,3,6,3,3,
  3,6,1,3,12,3,12,3,1,2,1,3,1,3,1,2,4,3,6,3,6,3,3,6,
  3,6,6,6,6,6,6,6,3,6,6,6,6,6,6,3,6,3,6,6,6,3,6,6,3,
  6,3,1,6,6,3,3,6,6,6,6,3,6,6,6,3,6,6,6,3,6,6,3,6,6,
  6,3,3,6,6,6,6,2,6,6,6,6,6,6,3,6,3,6,6,6,6,3,6,6,6,
  6,3,6,6,6,6,6,6,6,2,3,3,3,6,6,3,6,6,1,3,3,1,2,1,2,
  2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,1,1,
  2,2,2,2,2,1,1,2,2,2,2,1,2,1,2,1,1,2,2,2,2,1,2,1,2,
  1,2,2,1,2,1,2,2,2,1,1,2,2,1,2,1,2,2,2,1,1,3,3,3,6,
  3,6,3,6,3,3,6,3,1,3,3,1,3,3,1,2,1,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,2,1,2,2,2,2,2,1,1,
  6,3,3,6,6,6,3,3,3,6,6,3,6,2,1,1,2,1,1,2,3,3,1,1,3,
  3,1,1,2,2,1,1,1,1,2,2,1,1,2,1,1,2,1,1,2,2,1,1,3,3,
  1,3,3,6,3,3,6,3,1,3,3,6,3,6,6,6,6,3,6,3,6,6,6,6,3,
  3,6,3,3,6,6,6,6,6,6,6,6,6,3,3,6,6,3,3,3,3,6,6,3,3,
  3,3,3,6,6,3,1,3,1,3,2,1,2,1,1,2,2,2,2,2,2,2,2,2,1,
  2,1,1,1,2,1,2,1,1,1,2,1,2,1,1,1,2,1,2,1,1,1,2,1,2,
  1,1,1,2,2,1,1,2,2,1,1,1,1,1,1,2,2,1,1,2,2,1,1,1,1,
  1,3,3,3,3,6,6,3,3,3,3,1,3,3,6,6,3,3,1,1,1,1,1,1,1,
  1,1,1,3,1,3,1,1,1,1,1,1,3,12,12,24,12,24,24,24,12,24,
  4,6,12,24,12,6,12,24,24,12,12,6,24,24,24,24,24,12,24,24,
  24,24,24,8,24,24,24,24,24,24,24,24,24,12,24,24,12,24,24,
  12,12,24,24,24,24,24,12,24,24,24,24,24,24,12,24,24,12,24,
  12,24,24,12,24,4,12,12,4,24,12,12,24,24,12,24,12,24,24,
  8,12,12,24,4,24,24,24,12,24,24,24,24,12,24,24,12,24,24,
  24,24,6,8,24,24,24,24,24,24,24,24,24,24,12,24,24,24,24,
  24,24,24,24,24,24,24,12,24,12,12,24,24,24,24,24,24,12,12,
  24,24,24,12,12,24,24,6,12,12,12,24,24,6,12,3,24,24,24,
  24,24,24,24,24,24,12,24,24,24,24,24,24,24,12,24,12,24,24,
  12,24,12,12,24,24,24,24,12,4,24,12,24,24,12,12,12,24,12,
  24,24,24,12,24,12,8,24,6,4,12,3,12,12,6,12,1,2,4,4,2,
  2,1,4,4,4,2,2,4,4,4,2,2,2,2,4,4,4,4,4,2,2,4,4,4,4,
  2,2,4,4,4,2,2,2,2,4,4,1,2,1,4,4,2,2,4,4,4,2,2,4,4,
  4,4,4,4,2,2,4,2,2,1,2,4,4,2,2,1,4,4,4,2,2,4,4,4,2,
  2,2,2,4,4,1,2,1,3,6,6,3,3,3,6,3,3,3,3,6,6,6,6,3,6,
  6,6,6,6,3,6,3,6,6,6,6,3,3,6,1,6,6,3,3,3,3,3,3,6,3,
  6,6,6,6,3,3,6,3,6,3,1,3,6,3,3,3,1,12,12,12,24,6,24,
  12,24,24,12,8,4,12,24,12,24,6,3,4,2,4,4,1,3,1,3,3,3,
  1,3,1,3,3,3,1,1,1,1,2,2,4,1,2,1,2,1,4,3,12,3,4,1,2,
  1,3,3,2,1,3,1,3,1,3,3,2,1,2,1,12,3,1,12,3,4,1,2,3,
  1,3,3,6,3,3,6,3,1,2,2,2,4,1,1,2,1,3,3,1,1,3,3,3,3,
  3,3,6,6,3,3,3,3,6,6,2,1,2,4,2,1,2,1,2,8,3,3,3,2,8,
  8,3,3,3,24,8,3,3,3,3,3,6,24,8,3,3,3,3,3,3,6,2,1,1,
  2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,
  1,2,2,1,1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,
  2,1,1,1,1,1,1,1,2,1,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1,
  1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,
  2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,2,1,2,1,1,2,2,1,1,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,
  2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,1,2,
  4,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,2,1,2,1,1,4,2,2,2,1,1,2,1,2,1,1,2,2,
  4,2,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,
  1,2,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,1,
  1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,
  2,1,1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,1,1,1,1,1,
  1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,1,1,2,2,2,2,2,
  2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,
  1,2,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,
  1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,
  1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,
  2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,2,1,
  1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,
  1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,
  2,1,1,2,1,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,1,1,2,2,2,1,1,2,2,2,2,2,1,1,2,2,1,2,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,1,2,1,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,
  2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,
  2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,
  2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,1,2,1,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,
  2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,1,
  1,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,
  1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,2,2,2,1,2,2,2,1,2,2,1,2,2,2,1,2,1,1,1,1,
  2,2,1,1,2,2,1,2,2,2,1,2,1,2,2,1,2,2,1,2,1,2,2,1,2,
  2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2,
  2,1,1,2,2,1,2,2,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,
  2,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,2,1,2,2,
  1,2,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,2,2,1,2,1,2,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,1,2,1,2,1,2,2,2,2,1,
  2,1,1,1,2,1,2,2,2,2,2,1,1,1,2,2,1,1,2,2,1,1,2,2,1,
  1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,2,1,2,2,1,
  2,2,2,2,1,2,1,2,1,2,2,2,2,1,2,1,1,1,2,1,2,2,2,2,2,
  1,1,1,2,1,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,1,2,1,2,2,2,2,2,1,1,1,1,1,3,2,1,2,1,1,2,1,1,
  2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,2,2,1,1,2,1,1,2,1,
  1,2,2,1,1,4,2,2,2,4,1,2,1,1,4,1,1,1,1,2,1,4,4,2,2,
  2,4,1,4,4,1,2,1,2,1,1,4,2,2,2,1,2,1,2,2,2,2,1,2,1,
  1,1,1,2,2,1,1,1,1,2,2,2,2,1,1,1,1,2,2,1,1,1,1,2,2,
  2,1,2,2,4,4,4,4,4,4,4,4,2,2,4,4,2,2,1,2,1,2,1,2,1,
  1,1,1,1,2,4,4,1,2,2,4,4,1,2,1,2,2,1,1,1,1,2,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,2,2,2,2,1,2,2,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,1,2,1,2,2,2,2,2,1,1,
  1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,4,
  4,2,2,2,2,4,2,2,4,4,2,2,2,2,4,4,2,2,2,2,2,2,2,2,1,
  2,2,1,2,2,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,
  1,1,1,2,2,2,1,2,4,2,2,1,2,2,1,2,2,1,2,1,2,2,1,1,1,
  1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,
  1,2,2,1,2,4,4,2,2,2,1,1,2,2,1,2,2,1,2,4,2,2,1,1,2,
  2,1,2,1,2,1,1,1,1,1,1,2,1,1,2,1,1,1,1,2,1,1,1,1,1,
  2,1,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,2,2,2,2,1,1,1,
  1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,
  1,2,2,1,1,2,2,1,1,2,2,1,2,2,1,1,2,2,1,2,2,1,2,2,1,
  1,2,2,1,1,2,2,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,2,1,1,1,1,2,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,1,1,1,
  1,1,6,1,3,3,2,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,
  1,1,2,2,1,1,2,1,2,1,1,3,9,9,18,3,18,6,1,1,1,1,2,1,
  2,1,1,1,1,1,2,1,1,2,1,1,1,1,2,2,1,1,1,1,1,1,3,3,1,
  3,3,6,3,3,6,3,3,6,3,3,3,1,1,1,1,1,1,1,3,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,3,1,2,1,
  3,1,1,1];

CR_4.orderQClass :=
  [1,2,2,2,4,2,4,4,4,4,8,4,8,8,8,16,4,4,8,8,8,8,16,3,
  6,6,6,12,6,6,12,12,12,12,24,4,3,6,4,8,8,8,16,8,8,
  8,8,16,16,16,16,16,32,6,6,6,12,12,12,12,12,12,24,12,
  12,12,12,12,24,24,24,24,24,24,48,8,6,12,8,16,16,16,
  32,16,16,32,32,32,64,12,12,12,24,24,24,24,24,24,24,24,
  24,24,24,48,48,48,48,48,48,48,96,6,12,12,24,9,18,18,
  18,18,36,36,36,36,36,72,18,36,36,36,36,36,72,72,72,72,
  144,12,24,24,24,48,24,24,24,24,48,48,48,48,48,48,96,8,
  16,5,10,10,20,12,24,18,36,36,36,72,72,72,72,144,12,24,
  24,24,36,48,72,72,72,144,144,144,288,20,40,60,120,120,
  120,240,8,16,16,16,24,32,32,32,32,32,48,64,64,64,64,
  96,128,192,192,192,384,24,24,24,48,48,48,72,96,96,96,
  144,192,288,576,576,1152];

CR_4.parametersDadeGroup :=
  [[4,20,22,1,0],[4,25,11,2,0],[4,25,11,4,0],[4,29,9,1,0],[4,30,13,1,0],
  [4,31,7,1,0],[4,31,7,2,0],[4,32,21,1,0],[4,33,16,1,0]];

CR_4.QClassZClass :=
  [1,2,3,3,4,4,5,5,6,6,6,7,7,7,8,8,8,8,8,8,9,9,9,9,9,
  9,9,10,10,10,10,10,10,11,11,11,11,11,11,12,12,12,12,12,
  12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,14,14,
  14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,
  15,15,15,16,16,16,16,16,16,16,16,17,17,18,18,19,19,20,20,
  20,20,21,21,22,22,23,23,24,24,25,25,26,26,26,27,27,27,28,
  28,28,29,30,31,32,33,34,34,35,36,37,38,39,39,39,39,39,39,
  39,40,40,40,40,40,40,41,41,41,41,41,41,41,41,41,41,41,41,
  41,42,42,42,42,42,42,42,42,42,42,42,42,42,43,43,43,43,43,
  43,43,43,43,43,43,44,44,44,44,44,44,45,45,45,45,45,45,46,
  46,46,46,46,46,47,47,47,47,47,47,48,48,48,48,48,49,49,49,
  49,49,49,50,50,50,50,50,50,50,50,50,50,50,50,51,51,51,51,
  51,51,52,52,52,52,52,53,53,53,53,53,54,54,54,54,55,55,55,
  55,56,56,56,56,56,56,56,56,57,57,57,57,58,58,58,58,59,59,
  59,59,59,59,60,60,60,60,60,60,61,61,61,61,61,61,62,62,62,
  62,62,62,63,63,63,63,63,63,64,64,65,65,66,66,67,67,68,68,
  68,68,69,69,70,70,70,70,71,71,72,72,73,73,73,73,74,74,75,
  75,76,76,76,77,77,77,78,78,79,79,79,80,80,80,80,80,81,81,
  81,81,81,81,81,82,82,82,82,82,83,83,83,83,83,83,83,84,84,
  85,85,86,86,87,87,87,87,88,88,89,89,90,91,92,92,93,93,94,
  95,96,96,97,98,98,99,99,100,100,101,101,101,101,102,102,
  102,102,103,104,105,105,106,106,107,108,109,109,109,109,110,
  110,111,112,112,113,113,114,114,114,114,115,115,116,116,117,
  117,118,118,118,119,119,119,120,120,120,120,120,121,121,121,
  122,122,122,123,123,123,123,124,124,124,124,124,125,125,125,
  125,126,126,126,126,127,128,129,130,131,131,132,132,133,134,
  135,135,136,136,137,138,138,138,138,138,138,139,139,139,139,
  139,139,140,140,140,140,140,140,141,141,141,141,141,141,142,
  142,142,142,142,142,143,143,143,143,143,144,144,144,144,144,
  145,145,145,145,145,146,146,146,146,146,147,147,147,147,147,
  148,148,148,148,148,149,149,149,149,149,150,150,150,150,150,
  151,151,151,151,151,152,152,152,152,152,153,153,153,153,153,
  154,155,156,157,158,158,159,160,161,162,162,162,163,163,164,
  164,164,164,164,165,165,165,165,166,166,167,167,167,168,168,
  168,168,169,169,169,169,170,170,170,171,172,173,174,174,175,
  176,177,178,179,180,181,182,182,183,184,184,184,184,185,185,
  186,186,187,187,188,188,189,189,190,190,191,191,192,192,193,
  193,194,194,195,195,195,196,196,197,197,198,198,199,199,199,
  199,199,200,200,201,201,201,202,202,203,203,203,203,204,204,
  204,204,205,205,206,206,206,207,207,208,208,208,209,209,209,
  210,210,210,211,211,211,212,213,214,215,216,217,218,219,220,
  221,222,223,224,225,225,226,227];

CR_4.relatorNumbersQClass := CR_2.relatorNumbersQClass;

CR_4.rowConjugatorDadeGroup :=
  [[-5,3,-3,1],[-3,2,-2,1],[-2,-2,-1,-1],[-2,-1,1,-1],
  [-2,1,-1,-1],[-2,1,-1,0],[-2,1,-1,1],[-2,2,-1,-1],
  [-2,2,-1,1],[-1,-3,1,-1],[-1,-2,1,-1],[-1,-1,-1,-1],
  [-1,-1,-1,0],[-1,-1,-1,1],[-1,-1,0,-1],[-1,-1,0,0],
  [-1,-1,1,-1],[-1,-1,1,0],[-1,0,-1,-1],[-1,0,-1,0],
  [-1,0,-1,1],[-1,0,0,-1],[-1,0,0,0],[-1,0,0,1],
  [-1,0,1,0],[-1,1,-1,0],[-1,1,0,-1],[-1,1,0,0],
  [-1,1,0,1],[0,-2,0,-1],[0,-1,-1,-1],[0,-1,-1,0],
  [0,-1,-1,1],[0,-1,0,-1],[0,-1,0,0],[0,-1,0,1],
  [0,-1,1,-1],[0,-1,1,0],[0,-1,1,1],[0,0,-1,-1],
  [0,0,-1,0],[0,0,-1,1],[0,0,0,-1],[0,0,0,1],
  [0,0,1,-1],[0,0,1,0],[0,0,1,1],[0,1,-1,-1],
  [0,1,-1,0],[0,1,-1,1],[0,1,0,-1],[0,1,0,0],
  [0,1,0,1],[0,1,1,0],[0,1,1,1],[0,2,0,1],
  [1,-1,0,0],[1,-1,1,-1],[1,-1,1,0],[1,0,-1,0],
  [1,0,0,-1],[1,0,0,0],[1,0,0,1],[1,0,1,0],
  [1,0,1,1],[1,1,-1,0],[1,1,-1,1],[1,1,0,-1],
  [1,1,0,0],[1,1,0,1],[1,1,1,-2],[1,1,1,-1],
  [1,1,1,1],[1,2,-1,1],[1,2,0,1],[2,-2,1,-1],
  [2,-2,1,1],[2,-1,1,-1],[2,-1,1,0],[2,0,1,1],
  [2,1,-1,1],[2,2,1,-1],[2,2,1,1],[2,3,-1,1],
  [3,-2,1,-1],[3,-2,2,-1],[4,2,2,1],[5,-3,2,-2],
  [10,-6,5,-3],[-6,4,-3,2],[-4,2,-2,1],[-3,1,-1,-1],
  [-3,2,-1,1],[-2,-3,1,-1],[-2,-1,-1,0],[-2,0,-1,0],
  [-2,1,0,-1],[-2,1,0,1],[-1,-2,0,-1],[-1,-2,1,0],
  [-1,-1,-2,-1],[-1,-1,0,1],[-1,-1,1,1],[-1,0,1,1],
  [-1,0,1,2],[-1,0,2,1],[-1,1,-2,-1],[-1,1,-1,-1],
  [-1,1,-1,1],[-1,1,1,-1],[0,-3,1,-1],[0,-2,-1,0],
  [0,-2,2,1],[0,0,-2,-1],[0,0,2,1],[0,1,-2,-1],
  [0,1,1,-1],[0,2,2,1],[1,-2,1,0],[1,-1,0,-1],
  [1,-1,0,1],[1,-1,1,1],[1,0,-1,-1],[1,0,1,-1],
  [1,1,-2,-1],[1,1,-1,-1],[1,1,1,0],[1,2,-1,0],
  [1,3,-1,1],[2,-1,0,1],[2,-1,1,1],[2,0,0,-1],
  [2,0,1,0],[2,1,1,1],[2,1,2,1],[3,3,-1,1],
  [5,-3,2,-1],[5,6,-2,2],[7,9,-3,3]];

CR_4.rowGeneratorZClass :=
  [[-1,-1,-1,-1],[-1,-1,-1,0],[-1,-1,-1,1],[-1,-1,-1,2],[-1,-1,0,-1],
  [-1,-1,0,0],[-1,-1,0,1],[-1,-1,1,-1],[-1,-1,1,0],[-1,-2,2,0],
  [-1,0,-1,-1],[-1,0,-1,0],[-1,0,-1,1],[-1,0,0,-1],[-1,0,0,0],
  [-1,0,0,1],[-1,0,1,-1],[-1,0,1,0],[-1,0,1,1],[-1,1,-1,-1],
  [-1,1,-1,0],[-1,1,-1,1],[-1,1,0,-1],[-1,1,0,0],[-1,1,0,1],
  [-1,1,1,-1],[-1,1,1,0],[-2,-1,0,1],[-2,-2,0,-1],[-2,0,-1,0],
  [-2,0,-1,1],[-2,0,0,-1],[-2,0,0,1],[-2,0,1,-2],[-2,1,0,-2],
  [-4,3,0,2],[0,-1,-1,-1],[0,-1,-1,0],[0,-1,-1,1],[0,-1,0,-1],
  [0,-1,0,0],[0,-1,0,1],[0,-1,1,-1],[0,-1,1,0],[0,-1,1,1],
  [0,-2,-1,-1],[0,-2,-1,0],[0,-2,0,-1],[0,0,-1,-1],[0,0,-1,-2],
  [0,0,-1,0],[0,0,-1,1],[0,0,-1,2],[0,0,-2,-1],[0,0,-2,3],
  [0,0,-4,3],[0,0,0,-1],[0,0,0,1],[0,0,1,-1],[0,0,1,0],
  [0,0,1,1],[0,0,1,2],[0,0,2,-1],[0,0,2,1],[0,0,2,3],
  [0,0,3,-1],[0,0,3,-2],[0,0,4,-1],[0,0,4,3],[0,1,-1,-1],
  [0,1,-1,0],[0,1,-1,1],[0,1,0,-1],[0,1,0,0],[0,1,0,1],
  [0,1,1,-1],[0,1,1,0],[0,1,1,1],[0,1,2,1],[0,2,-2,-1],
  [1,-1,-1,0],[1,-1,-1,1],[1,-1,0,-1],[1,-1,0,0],[1,-1,0,1],
  [1,-1,1,-1],[1,-1,1,0],[1,-1,1,1],[1,0,-1,-1],[1,0,-1,-2],
  [1,0,-1,0],[1,0,-1,1],[1,0,-2,-1],[1,0,-2,1],[1,0,0,-1],
  [1,0,0,0],[1,0,0,1],[1,0,1,-1],[1,0,1,0],[1,0,1,1],
  [1,0,2,-1],[1,0,2,1],[1,1,-1,0],[1,1,-1,1],[1,1,0,-1],
  [1,1,0,0],[1,1,0,1],[1,1,1,-1],[1,1,1,-2],[1,1,1,0],
  [1,1,1,1],[1,2,0,1],[1,2,1,0],[1,2,1,1],[1,3,-1,1],
  [2,0,1,1],[2,1,0,-1],[2,1,0,1],[2,1,1,0],[2,1,1,1],
  [2,2,0,1],[4,-1,0,-2],[4,1,0,-2],[4,1,1,1]];

CR_4.spaceGroupIdentity :=
  [[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]];

CR_4.splittingQClass :=
  BlistList( [1..227],
  [36,37,38,76,77,78,112,113,114,115,154,155,160,161,162,163,
  171,172,173,174,175,176,177,178,191,192,193,194,195,196,198,
  201,212,213,214,215,216,217,218,219,220,221,222,223] );

CR_4.splittingSpaceGroupType :=
  BlistList( [ 1 .. 4783 ],
  [1325,1373,1374,1375,3517,3518,3519,3520,3521,3522,3523,3524,
  3525,3526,3527,3606,3615,3938,3939,3940,3941,3942,3943,3944,
  3945,3946,3947,4496,4497,4498,4504,4505,4506,4507,4508,4509,
  4510,4511,4512,4516,4544,4545,4546,4547,4548,4549,4550,4551,
  4552,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,
  4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,
  4602,4603,4604,4605,4606,4607,4615,4616,4617,4618,4619,4620,
  4646,4649,4650,4651,4652,4653,4659,4661,4759,4760,4761,4762,
  4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,
  4775,4776,4777,4778] );

CR_4.splittingZClass :=
  BlistList( [1..710],
  [131,132,133,331,332,333,334,335,336,337,338,420,421,422,423,
  424,425,426,427,428,429,568,569,575,576,577,578,579,580,581,
  584,607,608,609,610,611,612,613,614,615,638,639,640,641,642,
  643,644,645,646,647,648,649,650,653,654,662,663,664,694,695,
  696,697,698,699,700,701,702,703,704,705] );


#############################################################################
##
#F  CR_AgGroupQClass(<CR parameter list>,<warning>) . Q-class rep as ag group
##
##  'CR_AgGroupQClass'  returns  an ag group  isomorphic to the groups in the
##  specified Q-class.  If <warning> = true, then a warning will be displayed
##  in case that the given presentation is not a PAG system.
##
##  This is an  internal function  which does  not  check the arguments.  The
##  corresponding public function is 'AgGroupQClass'.
##
CR_AgGroupQClass := function ( param, warning )

    local CR, crgens, crrels, dim, F, G, i, ngens, nrels, num, ord, q, qcl,
          sys;

    # Get the arguments.
    dim := param[1];
    sys := param[2];
    qcl := param[3];
    CR := CrystGroupsCatalogue[dim];
    q := CR.nullQClass[sys] + qcl;

    ord := CR.orderQClass[q];

    if RemInt( ord, 60 ) = 0 then
        Print( "#I  Warning: a non-solvable group can't be represented",
            " as an ag group\n" );
        return false;
    fi;

    if ord = 1 then

        G := AgGroupFpGroup( FreeGroup( 0 ) );

    else

        ngens := RemInt( CR.codedPresentationQClass[q], 10 );
        crgens := Sublist( CR.generatorsQClass, [ 8 - ngens .. 7 ] );

        num := QuoInt( CR.codedPresentationQClass[q], 10 );
        crrels := Sublist( CR.relatorWordsQClass,
            CR.relatorNumbersQClass[num] );
        nrels := Length( crrels );

        F := FreeGroup( ngens );
        F.relators := List( [ 1 .. nrels ], i -> MappedWord( crrels[i],
            crgens, F.generators ) );

        # Initialize the ag group using the internal function 'AgFpGroup'.
        G := AgFpGroup( F );
        G.isDomain  := true;
        G.isGroup   := true;
        G.isAgGroup := true;

        # This group contains a canonical generating system, so it is
        # already normalized.
        G.cgs := G.generators;

        # Add the operations record for an ag group.
        G.operations := AgGroupOps;

        # Refine the ag series, if necessary.
        G := RefinedAgSeries( G );
        if warning and Length( G.generators ) <> Length( F.generators ) then
            Print( "#I  Warning: the presentation has been extended to get",
                " a PAG system\n" );
        fi;
    fi;

    # Save the Q-class parameters in the group record.
    G.name := CR_Name( "AgGroupQClass", param, 3 );
    G.size := ord;
    G.crQClass := [ dim, sys, qcl ];

    return G;
end;


#############################################################################
##
#F  CR_CharTableQClass( <CR parameter list> ) . . . char table of Q-class rep
##
##  'CR_CharTableQClass'  returns  the  character table  of a  representative
##  group of the specified Q-class.
##
##  This is an  internal function  which does  not  check the arguments.  The
##  corresponding public function is 'CharTableQClass'.
##
CR_CharTableQClass := function ( param )

    local CR, dim, F, G, qcl, sub, sys, table;

    # Get the arguments.
    dim := param[1];
    sys := param[2];
    qcl := param[3];
    CR := CrystGroupsCatalogue[dim];

    if dim = 4 and sys = 31 and 3 <= qcl and qcl <= 7 then

        # The given group is not solvable. Compute its table from a
        # permutation group isomorphic to the f.p. group.
        F := CR_FpGroupQClass( param );

        if qcl = 3 then
            # group 60.13 ($A_5$)
            sub := Subgroup( F, F.generators{ [ 2 .. 4 ] } );
        elif qcl = 4 or qcl = 5 then
            # group 120.1 ($S_5$)
            sub := Subgroup( F, F.generators{ [ 2, 3 ] } );
        elif qcl = 6 then
            # group 120.2 ($2 \times A_5$)
            sub := Subgroup( F, F.generators{ [ 2 .. 4 ] } );
        elif qcl = 7 then
            # group 240.1 ($2 \times S_5$)
            sub := Subgroup( F, [ F.generators[3], F.generators[2]^2 ] );
        fi;
        G := OperationCosetsFpGroup( F, sub );
        G.name := CR_Name( "FpGroupQClass", param, 3 );

    else

        # The given group is solvable. Construct an isomorphic ag group
        # with a PAG system and compute the table of that group.
        G := CR_AgGroupQClass( param, false );
        G.name := CR_Name( "FpGroupQClass", param, 3 );

    fi;

    table := CharTable( G );
    Unbind( table.group );
    table.name := CR_Name( "CharTableQClass", param, 3 );
    table.identifier := table.name;

    return table;
end;


#############################################################################
##
#F  CR_DisplayQClass( <CR parameter list> ) . . .  display Q-class invariants
##
##  'CR_DisplayQClass'  displays  for the  specified  Q-class  the  following
##  information:
##  - the size of the groups in the Q-class,
##  - the isomorphism type of the groups in the Q-class,
##  - the Hurley pattern,
##  - the rational constituents,
##  - the number of Z-classes in the Q-class, and
##  - the number of space-group types in the Q-class.
##
##  This is an  internal function  which does  not  check the arguments.  The
##  corresponding public function is 'DisplayQClass'.
##
CR_DisplayQClass := function ( param )

    local CR, dim, isotext, ord, pt1, pt2, pt3, q, qcl, snum, sys, text,
          type, zfirst, zlast, znum;

    # Get the arguments.
    dim := param[1];
    sys := param[2];
    qcl := param[3];
    CR := CrystGroupsCatalogue[dim];
    q := CR.nullQClass[sys] + qcl;

    ord := CR.orderQClass[q];
    type := QuoInt( CR.codedIsomorphismTypeQClass[q], 100 );
    isotext := RemInt( CR.codedIsomorphismTypeQClass[q], 100 );
    zfirst := CR.nullZClass[q] + 1;
    zlast := CR.nullZClass[q+1];
    znum := zlast - zfirst + 1;
    snum := CR.nullSpaceGroup[zlast+1] - CR.nullSpaceGroup[zfirst];
    pt1 := CR.codedDecompositionQClass[q];
    if pt1 > 4 then
        pt2 := QuoInt( pt1, 10 );
        pt3 := RemInt( pt1, 10 );
        pt1 := 1;
    fi;

    text := CR_TextStrings.QClass;

    # Print the Q-class type.
    if IsBound( CR.splittingQClass ) and CR.splittingQClass[q] then
        Print( text[8] );
    else
        Print( text[7] );
    fi;

    # Print "H" if the Q-class is a holohedry.
    if CR.hQClass[q] then Print( text[18] ); fi;

    # Print the Q-class parameters.
    Print( text[16], dim, text[15] );
    Print( sys, text[15], qcl, text[9] );

    # Print the order of the Q-class representative.
    Print( ord );

    # Print the isomorphism type of the Q-class representative.
    Print( text[10], ord, text[17], type );
    if isotext <> 0 then
        Print( text[20], CR_TextStrings.isomorphismType[isotext] );
    fi;

    # Print the Q-constituents.
    Print( text[21], text[pt1] );
    if pt1 = 1 then
        Print( CR_TextStrings.QConstituents[pt2], text[pt3] );
    fi;

    # Print the number of Z-classes in the given Q-class.
    pt1 := 11;
    if znum > 1 then pt1 := 12; fi;
    Print( znum, text[pt1] );

    # Print the number of space groups in the given Q-class.
    pt1 := 13;
    if snum > 1 then pt1 := 14; fi;
    Print( text[19], snum, text[pt1] );
    Print( "\n" );

end;


#############################################################################
##
#F  CR_DisplaySpaceGroupGenerators( <CR parameter list> ) . . . display space
#F  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  group generators
##
##  'CR_DisplaySpaceGroupGenerators'  displays the non-translation generators
##  of the space group specified by the given parameters.
##
##  This is an  internal function  which does  not  check the arguments.  The
##  corresponding public function is 'DisplaySpaceGroupGenerators'.
##
CR_DisplaySpaceGroupGenerators := function ( param )

    local CR, dim, G, gen, gens, text;

    # Get some arguments.
    dim := param[1];
    CR := CrystGroupsCatalogue[dim];

    text := CR_TextStrings.spaceGroup;

    # Get the non-translation generators.
    gens := CR_GeneratorsSpaceGroup( param );

    # Print a heading.
    Print( text[13], CR_Name( "SpaceGroup", param, 5 ), text[14] );

    # Print the non-translation generators.
    for gen in gens do PrintArray( gen ); Print( "\n" ); od;

end;


#############################################################################
##
#F  CR_DisplaySpaceGroupType( <CR parameter list> ) . . . . . . . . . display
#F  . . . . . . . . . . . . . . . . . . . . . . . . .  space group invariants
##
##  'CR_DisplaySpaceGroupType'  displays  for the  specified space-group type
##  the following information:
##  - the orbit size associated with the space-group type,
##  - the IT number (only in case dim = 2 or dim = 3), and
##  - the Hermann-Mauguin symbol (only in case dim = 2 or dim = 3).
##
##  This is an  internal function  which does  not  check the arguments.  The
##  corresponding public function is 'DisplaySpaceGroupType'.
##
CR_DisplaySpaceGroupType := function ( param )

    local CR, dim, it1, it2, obt, q, qcl, sgt, sys, t, text, z, zcl;

    # Get the arguments.
    dim := param[1];
    sys := param[2];
    qcl := param[3];
    zcl := param[4];
    sgt := param[5];
    CR := CrystGroupsCatalogue[dim];
    q := CR.nullQClass[sys] + qcl;
    z := CR.nullZClass[q] + zcl;
    t := CR.nullSpaceGroup[z] + sgt;

    text := CR_TextStrings.spaceGroup;

    # Print the space-group type.
    if dim > 2 and CR.splittingSpaceGroupType[t] then
        Print( text[2] );
    else
        Print( text[1] );
    fi;

    # Print the space group parameters.
    Print( text[6], dim, text[7] );
    Print( sys, text[7], qcl, text[7], zcl, text[7], sgt, text [12] );

    # Print the associated number in the International Tables.
    if dim <= 3 then
        it1 := t;
        it2 := 0;
        if dim = 3 then
            it1 := CR.internatTableSpaceGroupType[t];
            if it1 > 230 then
                it2 := QuoInt( it1, 1000 );
                it1 := RemInt( it1, 1000 );
            fi;
        fi;
        Print( text[3], it1, text[8], CR.HermannMauguinSymbol[it1] );
        if it2 = 0 then
            Print( text[10] );
        else
            Print( text[9], it2, text[8], CR.HermannMauguinSymbol[it2] );
            Print( text[11] );
        fi;
    else
        Print( text[10] );
    fi;

    # Print the orbit size.
    obt := 1;
    if sgt > 1 then
        obt := CR.orbitLengthSpaceGroup[t-z];
    fi;
    Print( text[5], obt );

    # Print a note, if the space group is fixed-point-free.
    if CR.fixedPointFreeSpaceGroup[t] then
        Print( text[4] );
    fi;
    Print( "\n" );

end;


#############################################################################
##
#F  CR_DisplayZClass( <CR parameter list> ) . . .  display Z-class invariants
##
##  'CR_DisplayZClass'  displays  for the  specified  Z-class  the  following
##  information:
##  - the Hermann-Mauguin symbol  of a representative space-group type  which
##    belongs to the Z-class (only in case dim = 2 or dim = 3),
##  - the Bravais type,
##  - some decomposability information,
##  - the number of space-group types belonging to the Z-class, and
##  - the size of the associated cohomology group.
##
##  This is an  internal function  which does  not  check the arguments.  The
##  corresponding public function is 'DisplayZClass'.
##
CR_DisplayZClass := function ( param )

    local code, cohom, CR, decomp, dim, fam, q, qcl, sgt, snum, sys, t, text,
          type, z, zcl;

    # Get the arguments.
    dim := param[1];
    sys := param[2];
    qcl := param[3];
    zcl := param[4];
    CR := CrystGroupsCatalogue[dim];
    q := CR.nullQClass[sys] + qcl;
    z := CR.nullZClass[q] + zcl;
    sgt := param[5];

    fam := CR.familyCrystalSystem[sys];
    code := CR.codedPropertiesZClass[z];
    decomp := RemInt( code, 10 );
    code := QuoInt( code, 10 );
    type := RemInt( code, 10 );
    cohom := QuoInt( code, 10 );
    snum := CR.nullSpaceGroup[z+1] - CR.nullSpaceGroup[z];

    text := CR_TextStrings.ZClass;

    # Print the Z-class type.
    if IsBound( CR.splittingZClass ) and CR.splittingZClass[z] then
        Print( text[6] );
    else
        Print( text[5] );
    fi;

    # Print "B" if the Z-class is a Bravais Z-class.
    if CR.bZClass[z] then Print( text[15] ); fi;

    # Print the Z-class parameters.
    Print( text[14], dim, text[13] );
    Print( sys, text[13], qcl, text[13], zcl, text[12] );

    # Print the Hermann-Mauguin symbol.
    if dim <= 3 then
        if sgt = 0 then  sgt := 1;  fi;
        t := CR.nullSpaceGroup[z] + sgt;
        if dim = 3 then  t := CR.internatTableSpaceGroupType[t];  fi;
        if t > 230 then  t := QuoInt( t, 1000 );  fi;
        Print( text[11], CR.HermannMauguinSymbol[t], text[12] );
    fi;

    # Print family number and Bravais type.
    Print( text[7], CR_TextStrings.roman[fam], text[16],
        CR_TextStrings.roman[type] );
    Print( text[decomp] );

    # Print the number of space groups in the given Z-class.
    if snum = 1 then
        Print( text[17], snum, text[8] );
    else
        Print( text[17], snum, text[9] );
    fi;

    # Print the order of the cohomology group.
    Print( text[10], cohom, "\n" );

end;


#############################################################################
##
#F  CR_FpGroupQClass( <CR parameter list> ) . . . . Q-class rep as f.p. group
##
##  'CR_FpGroupQClass'  returns a f. p. group isomorphic to the groups in the
##  specified Q-class.
##
##  This is an  internal function  which does  not  check the arguments.  The
##  corresponding public function is 'FpGroupQClass'.
##
CR_FpGroupQClass := function ( param )

    local CR, crgens, crrels, dim, F, i, list, ngens, nrels, num, ord, q,
          qcl, sys;

    dim := param[1];
    sys := param[2];
    qcl := param[3];
    CR := CrystGroupsCatalogue[dim];
    q := CR.nullQClass[sys] + qcl;

    ord := CR.orderQClass[q];

    if ord = 1 then

        F := FreeGroup( 0 );
        F.relators := [ ];

    else

        ngens := RemInt( CR.codedPresentationQClass[q], 10 );
        crgens := Sublist( CR.generatorsQClass, [ 8 - ngens .. 7 ] );

        num := QuoInt( CR.codedPresentationQClass[q], 10 );
        crrels := Sublist( CR.relatorWordsQClass,
            CR.relatorNumbersQClass[num] );
        nrels := Length( crrels );

        F := FreeGroup( ngens );
        if RemInt( ord, 60 ) = 0 then
            list := [ 1 .. nrels ];
        else
            list := Reversed( Concatenation(
                [ ngens + 1 .. nrels ], [ 1 .. ngens ] ) );
        fi;
        F.relators := List( list, i -> MappedWord( crrels[i], crgens,
            F.generators ) );

    fi;

    # Save the Q-class parameters in the group record.
    F.name := CR_Name( "FpGroupQClass", param, 3 );
    F.size := ord;
    F.crQClass := [ dim, sys, qcl ];

    return F;
end;


#############################################################################
##
#F  CR_GeneratorsSpaceGroup( <CR parameter list> ) . . space group generators
##
##  'CR_GeneratorsSpaceGroup'  returns the  non-translation generators of the
##  space group specified by the given parameters.
##
CR_GeneratorsSpaceGroup := function ( param )

    local code, column, columnGeneratorSpaceGroup, CR, dim, dim1, gens, i, j,
          mat, modul, ngens, num, q, qcl, quot, sgt, sys, t, z, zcl;

    # Get the arguments.
    dim := param[1];
    sys := param[2];
    qcl := param[3];
    zcl := param[4];
    sgt := param[5];
    CR := CrystGroupsCatalogue[dim];
    q := CR.nullQClass[sys] + qcl;
    z := CR.nullZClass[q] + zcl;
    t := CR.nullSpaceGroup[z] + sgt;
    dim1 := dim + 1;
    modul := CR.modulSp;
    columnGeneratorSpaceGroup := CR.columnGeneratorSpaceGroup;

    code := 0;
    if t > CR.nullSpaceGroup[z] + 1 then
        code := CR.codedGeneratorsSpaceGroup[t-z];
    fi;

    gens := CR_GeneratorsZClass( dim, z );
    ngens := Length( gens );
    for i in [ 1 .. ngens ] do
        mat := gens[i];
        num := RemInt( code, modul ) + 1;
        code := QuoInt( code, modul );
        column := columnGeneratorSpaceGroup[num];
        quot := column[dim1];
        for j in [ 1 .. dim ] do
            mat[j][dim1] := column[j] / quot;
        od;
        mat[dim1] := 0 * [ 1 .. dim1 ];
        mat[dim1][dim1] := 1;
    od;

    return gens;
end;


#############################################################################
##
#F  CR_GeneratorsZClass( <dim>, <zclass> ) . . . . . . . .  matrix generators
##
##  'CR_GeneratorsZClass'   returns  a   set  of  matrix  generators   for  a
##  representative of the specified Z-class. These generators are chosen such
##  that  they  satisfy  the  defining  relators  which are  returned  by the
##  'CR_FpGroupQClass'  function for the representative  of the corresponding
##  Q-class.
##
CR_GeneratorsZClass := function ( dim, z )

    local anz, code, codedGeneratorZClass, CR, gens, i, j, k, mat, modul,
          n, rowGeneratorZClass;

    CR := CrystGroupsCatalogue[dim];
    modul := CR.modulZ;
    rowGeneratorZClass := CR.rowGeneratorZClass;
    codedGeneratorZClass := CR.codedGeneratorZClass;
    n := CR.nullGeneratorsZClass[z];
    anz := CR.nullGeneratorsZClass[z+1] - n;
    gens := 0 * [ 1 .. anz ];

    for i in [ 1 .. anz ] do
        mat := 0 * [ 1 .. dim ];
        n := n + 1;
        code := CR.codedGeneratorZClass[n];
        for j in [ 1 .. dim ] do
            k := RemInt( code, modul ) + 1;
            code := QuoInt( code, modul );
            mat[j] := Copy( rowGeneratorZClass[k] );
        od;
        gens[i] := mat;
    od;

    return gens;
end;


#############################################################################
##
#F  CR_MatGroupZClass( <CR parameter list> ) . .  Z-class rep as matrix group
##
##  'CR_MatGroupZClass'  returns  a  representative  group  of the  specified
##  Z-class.  The generators  of the  resulting matrix group  are chosen such
##  that they  satisfy  the  defining  relators  which  are  returned  by the
##  'CR_FpGroupQClass' function  for the representative  of the corresponding
##  Q-class.
##
##  This is an  internal function  which does  not  check the arguments.  The
##  corresponding public function is 'MatGroupZClass'.
##
CR_MatGroupZClass := function ( param )

    local CR, dim, G, gens, q, qcl, sys, z, zcl;

    # Get the arguments.
    dim := param[1];
    sys := param[2];
    qcl := param[3];
    zcl := param[4];
    CR := CrystGroupsCatalogue[dim];
    q := CR.nullQClass[sys] + qcl;
    z := CR.nullZClass[q] + zcl;

    gens := CR_GeneratorsZClass( dim, z );
    G := Group( gens, CR.GLZ.identity );

    # Save the Z-class parameters in the group record.
    G.size := CR.orderQClass[CR.QClassZClass[z]];
    G.name := CR_Name( "MatGroupZClass", param, 4 );
    G.crZClass := [ dim, sys, qcl, zcl ];
    G.crConjugator := G.identity;

    return G;
end;


#############################################################################
##
#F  CR_Name( <string>, <CR parameter list>, <nparms> ) . . .  name of crystal
#F  . . . . . . . . . . . . . . . . . . . . . . . .  group or character table
##
##  'CR_Name'  returns  the "name"  of the  specified object  which  may be a
##  Z-class representative,  a Q-class representative or its character table,
##  or a space group.  The resulting name  is a string  which consists of the
##  given string  followed by the relevant parameters  which are separated by
##  commas and enclosed in parentheses.
##
CR_Name := function ( string, param, nparms )

    local dim, name, qcl, sgt, sys, zcl;

    # Initialize the name by the given string and a left parenthesis.
    name := ConcatenationString( string, "( " );

    # Add the dimension.
    dim := param[1];
    name := ConcatenationString( name, String( dim ) );

    # Add the crystal system parameter.
    sys := param[2];
    name := ConcatenationString( name, ", " );
    name := ConcatenationString( name, String( sys ) );

    # Add the Q-class parameter.
    qcl := param[3];
    name := ConcatenationString( name, ", " );
    name := ConcatenationString( name, String( qcl ) );

    if nparms > 3 then

        # Add the Z-class parameter.
        zcl := param[4];
        name := ConcatenationString( name, ", " );
        name := ConcatenationString( name, String( zcl ) );

        if nparms > 4 then

            # Add the space-group type.
            sgt := param[5];
            name := ConcatenationString( name, ", " );
            name := ConcatenationString( name, String( sgt ) );
        fi;
    fi;

    # Close the name by a right parenthesis and return it.
    return ConcatenationString( name, " )" );
end;


#############################################################################
##
#F  CR_NormalizerZClass( <CR parameter list> ) . .  normalizer of Z-class rep
##
##  'CR_NormalizerZClass'   returns   the  normalizer  in  GL(dim,Z)  of  the
##  specified  Z-class  representative  matrix  group.  If the  order  of the
##  normalizer is  finite,  then the  group record components  "crZClass" and
##  "crConjugator" will be set properly.
##
##  This is an  internal function  which does  not  check the arguments.  The
##  corresponding public function is 'NormalizerZClass'.
##
CR_NormalizerZClass := function ( param )

    local con, coninv, CR, dim, gens, N, q1, qcl1, sys1, z, z1, z2, zcl1;

    # Get the arguments.
    dim := param[1];
    CR := CrystGroupsCatalogue[dim];
    z := CR.nullZClass[ CR.nullQClass[param[2]] + param[3] ] + param[4];

    z1 := RemInt( CR.codedNormalizerZClass[z], 1000 );
    z2 := QuoInt( CR.codedNormalizerZClass[z], 1000 );

    if z1 = 0 then

        gens := Concatenation(
            CR_GeneratorsZClass( dim, z ), CR_GeneratorsZClass( dim, z2 ) );

        N := Group( gens, CR.GLZ.identity );
        N.size := "infinity";

    else

        gens := CR_GeneratorsZClass( dim, z1 );
        if z2 <> 0 then
            coninv := CR_GeneratorsZClass( dim, z2 )[1];
            con := coninv^-1;
            gens := coninv * gens * con;
        fi;

        q1 := CR.QClassZClass[z1];
        sys1 := CR.crystalSystemQClass[q1];
        qcl1 := q1 - CR.nullQClass[sys1];
        zcl1 := z1 - CR.nullZClass[q1];

        N := Group( gens, CR.GLZ.identity );
        N.size := CR.orderQClass[q1];

        # Save the Z-class parameters in the normalizer group record.
        N.name := CR_Name( "NormalizerZClass", param, 4 );
        N.crZClass := [ dim, sys1, qcl1, zcl1 ];
        if z2 <> 0 then
            N.crConjugator := con;
        else
            N.crConjugator := N.identity;
        fi;
    fi;

    return N;
end;


#############################################################################
##
#F  CR_Parameters( [ <dim>, <system>, <qclass>, <zclass>, <sgtype> ], nparms)
#F  CR_Parameters( [ <dim>, <system>, <qclass>, <zclass> ], nparms )  . . . .
#F  CR_Parameters( [ <dim>, <system>, <qclass> ], nparms ) . . . . . internal
#F  CR_Parameters( [ <dim>, <IT number> ], nparms ) . . . . .  parameters for
#F  CR_Parameters( [ <Hermann-Mauguin symbol> ], nparms ) . .  crystal groups
##
##  Valid argument lists are
##
##     [ dim, sys, qcl, zcl, sgt ], 5
##     [ dim, sys, qcl, zcl ], 4
##     [ dim, sys, qcl ], 3
##     [ 3, it ], n
##     [ 2, it ], n
##     [ symbol ], n
##
##  where
##
##  dim = dimension,
##  sys = crystal system number with respect to a given dimension,
##  qcl = Q-class number  with respect to given dimension and crystal system,
##  zcl = Z-class number with respect to given dimension, crystal system, and
##        Q-class,
##  sgt = space-group type  with respect to given dimension,  crystal system,
##        Q-class, and Z-class,
##  it  = corresponding  number   in  the   International  Tables  (only  for
##        dimensions 2 and 3),
##  n   = 3 or 4 or 5,
##  symbol = Hermann-Mauguin symbol (only for dimensions 2 or 3).
##
##  'CR_Parameters' checks the given arguments to be consistent and in range,
##   and returns them in form of an "internal CR parameter list"
##
##      [ dim, sys, qcl, zcl, sgt ]
##
##  which  contains  the  "local parameters"  of the  respective object.  The
##  following  "global parameters"  of the  same  object  are used  as  local
##  variables.
##
##  q   = Q-class number  with respect to the  list of all  Q-classes  of the
##        current dimension,
##  z   = Z-class number  with respect to the  list of all  Z-classes  of the
##        current dimension,
##  t   = space-group type  with respect to the list of all space-group types
##        of the current dimension,
##  CR  = catalogue   record   CrystGroupsCatalogue[dim]   for  the   current
##        dimension dim.
##
CR_Parameters := function ( args, nparms )

    local catlist, CR, dim, it, nargs, param, q, qcl, sgt, symbol, sys, t, z,
          zcl;

    # Check number of arguments.
    nargs := Length( args );
    if nargs <> nparms and nargs <> 1 and nargs <> 2 then
        Error( "illegal number of arguments" );
    fi;

    # Initialize the parameters list.
    param := 0 * [ 1 .. 5 ];

    if nargs < 3 then

        if nargs = 1 then

            # The argument is a Hermann-Mauguin symbol.
            symbol := args[1];
            it := Position( CR_2.HermannMauguinSymbol, symbol );
            if it <> false then
                dim := 2;
            else
                it := Position( CR_3.HermannMauguinSymbol, symbol );
                if it = false then
                    Error( "don't know the given Hermann-Mauguin symbol" );
                fi;
                dim := 3;
            fi;
            CR := CrystGroupsCatalogue[dim];
            catlist := CR.spaceGroupTypeInternatTable;

        else

            # The second argument is an International Table number.
            # Check the dimension parameter.
            dim := args[1];
            if not IsInt( dim ) or dim < 2 or 4 < dim then
                Error( "inconsistent dimension parameter" );
            fi;
            CR := CrystGroupsCatalogue[dim];

            # Check the IT number.
            it := args[2];
            catlist := CR.spaceGroupTypeInternatTable;
            if not IsInt( it ) or it < 1 or Length( catlist ) < it then
                Error( "illegal IT number" );
            fi;
        fi;

        # Reconstruct the space group parameters from the coded information
        # in the catalogue list and store them in the parameters list.
        param[1] := dim;
        z := RemInt( catlist[it], 100 );
        q := CR.QClassZClass[z];
        sys := CR.crystalSystemQClass[q];
        param[2] := sys;
        param[3] := q - CR.nullQClass[sys];
        if nparms > 3 then
            param[4] := z - CR.nullZClass[q];
            t := QuoInt( catlist[it], 100 );
            param[5] := t - CR.nullSpaceGroup[z];
        fi;

    else

        # Check the dimension parameter.
        dim := args[1];
        if not IsInt( dim ) or dim < 2 or 4 < dim then
            Error( "illegal dimension parameter" );
        fi;
        param[1] := dim;

        # Check the crystal system parameter.
        sys := args[2];
        CR := CrystGroupsCatalogue[dim];
        if not IsInt( sys ) or sys < 1 or Length( CR.nullQClass ) <= sys then
            Error( "crystal system parameter out of range" );
        fi;
        param[2] := sys;

        # Check the Q-class parameter and get the Q-class number with respect
        # to all Q-classes for dimension dim.
        qcl := args[3];
        if not IsInt( qcl ) or qcl < 1 or
            CR.nullQClass[sys+1] - CR.nullQClass[sys] < qcl then
            Error( "Q-class parameter out of range" );
        fi;
        param[3] := qcl;

        if nargs > 3 then
            # Check the Z-class parameter and get the Z-class number with
            # respect to all Z-classes for dimension dim.
            zcl := args[4];
            q := CR.nullQClass[sys] + qcl;
            if not IsInt( zcl ) or zcl < 1 or
                CR.nullZClass[q+1] - CR.nullZClass[q] < zcl then
                Error( "Z-class parameter out of range" );
            fi;
            param[4] := zcl;

            if nargs > 4 then
                # Check the space-group type parameter.
                sgt := args[5];
                z := CR.nullZClass[q] + zcl;
                if not IsInt( sgt ) or sgt < 1 or
                    CR.nullSpaceGroup[z+1] - CR.nullSpaceGroup[z] < sgt then
                    Error( "space-group type parameter out of range" );
                fi;
                param[5] := sgt;
            fi;
        fi;
    fi;

    return( param );
end;


#############################################################################
##
#F  CR_SpaceGroup( <CR parameter list> ) . . . . . . . . . . . .  space group
##
##  'CR_SpaceGroup'  returns  a  representative  matrix  group  (of dimension
##  dim+1) of the specified space-group type.
##
##  This is an  internal function  which does  not  check the arguments.  The
##  corresponding public function is 'SpaceGroup'.
##
##  In particular, the function expects that, whenever the order of the point
##  group is not a multiple of 60,  the given  point group presentation  is a
##  polycyclic power commutator presentation  containing  a list of  n  power
##  relators  and  n*(n-1)/2  commutator relators  in some  prescribed order,
##  where n is the number of its generators.
##
CR_SpaceGroup := function ( param )

    local CR, crgens, crrels, dim, dim1, exp, G, g, g1, gen, gens, gens0, i,
          i1, i2, inv, j, mat, leng, names, ngens, ngens0, ngens1, nrels,
          num, q, qcl, rel, rels, S, subword, sys, word;

    # Get the arguments.
    dim := param[1];
    sys := param[2];
    qcl := param[3];
    CR := CrystGroupsCatalogue[dim];
    q := CR.nullQClass[sys] + qcl;
    dim1 := dim + 1;

    # Get the non-translation generators.
    gens := CR_GeneratorsSpaceGroup( param );

    # Add the translation generators.
    for i in [ 1 .. dim ] do
        mat := Copy( CR.spaceGroupIdentity );
        mat[i][dim1] := 1;
        Add( gens, mat );
    od;

    # Construct the space group.
    S := Group( gens, CR.spaceGroupIdentity );

    # Initialize a finitly presented group G isomorphic to S.
    ngens := Length( S.generators );
    ngens0 := ngens - dim;
    ngens1 := ngens0 + 1;
    names := List( [ 1 .. ngens ],
        i -> ConcatenationString( "g", String( i ) ) );
    G := FreeGroup( names );
    g := G.generators;
    rels := [ ];

    # Extended the point group relators.
    if ngens0 > 0 then
        g1 := Sublist( g, [ 1 .. ngens0 ] );
        gens0 := Sublist( gens, [ 1 .. ngens0 ] );
        crgens := Sublist( CR.generatorsQClass, [ 8 - ngens0 .. 7 ] );
        num := QuoInt( CR.codedPresentationQClass[q], 10 );
        crrels := Sublist( CR.relatorWordsQClass,
            CR.relatorNumbersQClass[num] );
        nrels := Length( crrels );
        if RemInt( CR.orderQClass[q], 60 ) = 0 then

            # The point group is non-solvable, so just extend its relators
            # appropriately.
            for i in [ 1 .. nrels ] do
                mat := MappedWord( crrels[i], crgens, gens0 );
                word := IdWord;
                for j in [ 1 .. dim ] do
                    word := word * g[ngens0+j]^mat[j][dim1];
                od;
                Add( rels, MappedWord( crrels[i], crgens, g1 ) * word^-1 );
            od;
        else

            # The point group is solvable, so construct a polycyclic
            # power commutator presentation.
            if nrels <> ngens0 * ngens1 / 2 then
                Error( "This is a bug. You should never get here.\n" );
            fi;

            # First handle the power relators.
            for i in [ 1 .. ngens0 ] do
                rel := crrels[ngens1-i];
                leng := LengthWord( rel );
                gen := crgens[i];
                if leng < 2 or Subword( rel, 1, 2 ) <> gen^2 then
                    Error( "This is a bug. You should never get here.\n" );
                fi;
                exp := 2;
                while exp < leng and Subword( rel, exp+1, exp+1 ) = gen do
                    exp := exp + 1;
                od;
                word := IdWord;
                if exp = leng then
                    mat := gens0[i]^exp;
                    for j in [ 1 .. dim ] do
                        word := word * g[ngens0+j]^mat[j][dim1];
                    od;
                    Add( rels, g[i]^exp * word^-1 );
                else
                    subword := Subword( rel, exp + 1, leng );
                    mat := MappedWord( subword, crgens, gens0 ) *
                        gens0[i]^exp;
                    for j in [ 1 .. dim ] do
                        word := word * g[ngens0+j]^mat[j][dim1];
                    od;
                    Add( rels, g[i]^exp * word^-1 * MappedWord(
                       subword, crgens, g1 ) );
                fi;
            od;

            # Now handle the commutator relators.
            i := nrels + 1;
            for i2 in [ 2 .. ngens0 ] do
                for i1 in [ 1 .. i2 - 1 ] do
                    i := i - 1;
                    rel := crrels[i];
                    leng := LengthWord( rel );
                    if leng < 4 or Subword( rel, 1, 4 ) <>
                        Comm( crgens[i2], crgens[i1] ) then
                        Error("This is a bug. You should never get here.\n");
                    fi;
                    word := IdWord;
                    if leng = 4 then
                        mat := Comm( gens0[i2], gens0[i1] );
                        for j in [ 1 .. dim ] do
                            word := word * g[ngens0+j]^mat[j][dim1];
                        od;
                        Add( rels, Comm( g[i2], g[i1] ) *
                            word^-1 );
                    else
                        subword := Subword( rel, 5, leng );
                        mat := MappedWord( subword, crgens, gens0 ) *
                            Comm( gens0[i2], gens0[i1] );
                        for j in [ 1 .. dim ] do
                            word := word * g[ngens0+j]^mat[j][dim1];
                        od;
                        Add( rels, Comm( g[i2], g[i1] ) *
                            word^-1 * MappedWord( subword, crgens, g1 ) );
                    fi;
                od;
            od;
        fi;
    fi;

    # Add the remaining commutator relators.
    inv := List( gens, mat -> mat^-1 );
    for i2 in [ ngens1 .. ngens ] do

        # Add the relators which describe the action of the non-translation
        # generators on the translation generators.
        for i1 in [ 1 .. ngens0 ] do
            mat := inv[i2] * inv[i1] * gens[i2] * gens[i1];
            word := IdWord;
            for j in [ 1 .. dim ] do
                word := word * g[ngens0+j]^mat[j][dim1];
            od;
            Add( rels, Comm( g[i2], g[i1] ) * word^-1 );
        od;

        # Add the commutator relators for the translation generators.
        for i1 in [ ngens1 .. i2 - 1 ] do
            Add( rels, Comm( g[i2], g[i1] ) );
        od;
    od;

    # Save the finitely presented group G in the group record of S.
    G.relators := rels;
    S.fpGroup := G;

    # Save the space group type parameters in the group record.
    S.size := "infinity";
    S.name := CR_Name( "SpaceGroup", param, 5 );
    S.crSpaceGroupType := param;

    return S;
end;


#############################################################################
##
#F  CR_ZClassRepsDadeGroup( <CR parameter list>, <d> )  . . . .  Z-class reps
#F  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . in Dade group
##
##  'CR_ZClassRepsDadeGroup'  returns  a  list of  representatives  of  those
##  conjugacy classes  of subgroups of the given Dade group  which consist of
##  groups belonging to the given Z-class.
##
##  This is an  internal function  which does  not  check the arguments.  The
##  corresponding public function is 'ZClassRepsDadeGroup'.
##
CR_ZClassRepsDadeGroup := function ( param, d )

    local code, con, CR, dim, G, i, j, k, mat, matinv, modul, n1, n2, reps,
          rowConjugatorDadeGroup, z;

    # Get the arguments.
    dim := param[1];
    CR := CrystGroupsCatalogue[dim];
    z := CR.nullZClass[ CR.nullQClass[param[2]] + param[3] ] + param[4];

    rowConjugatorDadeGroup := CR.rowConjugatorDadeGroup;
    n1 := CR.nullDadeGroupsZClass[z] + 1;
    n2 := CR.nullDadeGroupsZClass[z+1];
    reps := 0 * [ ];

    # Loop over all Dade groups containing groups from the given Z-class.
    for i in [ n1 .. n2 ] do

        # Check the Dade group for being the given one.
        code := CR.codedDadeGroupsZClass[i];
        if RemInt( code, 10 ) = d then

            # Construct the representative matrix group of the given Z-class.
            G := CR_MatGroupZClass( param );

            # Conjugate the group, if necessary.
            con := QuoInt( code, 10);
            if con <> 0 then
                modul := 140;
                matinv := 0 * [ 1 .. dim ];
                code := CR.codedConjugatorDadeGroup[con];
                for j in [ 1 .. dim ] do
                    k := RemInt( code, modul );
                    code := QuoInt( code, modul );
                    matinv[j] := Copy( rowConjugatorDadeGroup[k] );
                od;
                mat := matinv^-1;
                G.generators := matinv * G.generators * mat;
                G.crConjugator := mat;
                G.name := Concatenation( Concatenation( G.name, "^" ),
                    String( mat ) );
            fi;

            # Save the group in the list.
            Add( reps, G );
        fi;
    od;

    return reps;
end;


#############################################################################
##
#F  AgGroupQClass( <dim>, <system>, <qclass> )  . . . . . . . . . . . Q-class
#F  AgGroupQClass( <dim>, <IT number> ) . . . . . . . . . . .  representative
#F  AgGroupQClass( <Hermann-Mauguin symbol> ) . . . . . . . . . . as ag group
##
##  'AgGroupQClass'  returns  an ag group  isomorphic  to the  groups  in the
##  specified Q-class.
##
AgGroupQClass := function ( arg )

    local A, param;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 3 );

    # Construct the corresponding ag group (if solvable).
    A := CR_AgGroupQClass( param, true );

    return A;
end;


#############################################################################
##
#F  CharTableQClass( <dim>, <system>, <qclass> ) . . . . . .  character table
#F  CharTableQClass( <dim>, <IT number> ) . . . . . . . . . . .  of a Q-class
#F  CharTableQClass( <Hermann-Mauguin symbol> ) . . . .  representative group
##
##  'CharTableQClass'  returns the  character table of a representative group
##  of the specified Q-class.
##
CharTableQClass := function ( arg )

    local T, param;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 3 );

    # Construct the character table of the class representative group.
    T := CR_CharTableQClass( param );

    return T;
end;


#############################################################################
##
#F  DisplayCrystalFamily( <dim>, <family> ) . . . . . . . . . .  display some
#F  . . . . . . . . . . . . . . . . . . . . . . . . crystal family invariants
##
##  'DisplayCrystalFamily'  displays  for the  specified  crystal family  the
##  following information:
##  - the family name,
##  - the number of parameters,
##  - the common rational decomposition pattern,
##  - the common real decomposition pattern,
##  - the number of crystal systems in the family, and
##  - the number of Bravais flocks in the family.
##
DisplayCrystalFamily := function ( dim, fam )

    local bnum, code, CR, pnum, pt, qdecomp, rdecomp, snum, text;

    # Check the dimension parameter.
    if not IsInt( dim ) or dim < 2 or 4 < dim then
        Error( "dimension out of range (must be 2, 3, or 4)" );
    fi;
    CR := CrystGroupsCatalogue[dim];

    # Check the family parameter.
    if not IsInt( fam ) or fam < 1 or Length( CR.nameCrystalFamily ) < fam
        then Error( "family parameter out of range" );
    fi;

    code := CR.codedPropertiesFamily[fam];
    rdecomp := RemInt( code, 10 );
    code := QuoInt( code, 10 );
    qdecomp := RemInt( code, 10 );
    code := QuoInt( code, 10 );
    bnum := RemInt( code, 10 );
    pnum := QuoInt( code, 10 );
    snum := Number( CR.familyCrystalSystem, x -> x = fam );

    text := CR_TextStrings.family;

    # Print the family number.
    Print( text[12], CR_TextStrings.roman[fam] );

    # Print the name of the family.
    Print( text[13], CR.nameCrystalFamily[fam] );

    # Print the number of free parameters.
    Print( text[14], pnum, text[16] );
    if pnum > 1 then
        Print( text[15] );
    fi;
    Print( text[19] );

    # Print the rational decomposition pattern.
    if qdecomp = 1 then
        Print( text[10], text[1], text[14] );
    elif qdecomp > 1 then
        Print( text[10], text[2], text[qdecomp], text[14] );
    fi;

    # Print the real decomposition pattern.
    if rdecomp = 1 then
        Print( text[11], text[1] );
    elif rdecomp > 1 then
        Print( text[11], text[2], text[rdecomp] );
    fi;

    # Print the number of crystal systems in the given family.
    pt := 19;
    if qdecomp = 0 then pt := 14; fi;
    Print( text[pt], snum, text[17] );
    if snum > 1 then
        Print( text[15] );
    fi;

    # Print the number of Bravais flocks.
    Print( text[14], bnum, text[18] );
    if bnum > 1 then
        Print( text[15] );
    fi;

    Print( "\n" );

end;


#############################################################################
##
#F  DisplayCrystalSystem( <dim>, <system> ) . . . . . . . . . .  display some
#F  . . . . . . . . . . . . . . . . . . . . . . . . crystal system invariants
##
##  'DisplayCrystalSystem'  displays  for the  specified  crystal system  the
##  following information:
##  - the number of Q-classes in the crystal system, and
##  - the triple  (dim, sys, qcl)  of parameters of the Q-class  which is the
##    holohedry of the crystal system.
##
DisplayCrystalSystem := function ( dim, sys )

    local CR, qnum, text;

    # Check the dimension parameter.
    if not IsInt( dim ) or dim < 2 or 4 < dim then
        Error( "dimension out of range (must be 2, 3, or 4)" );
    fi;
    CR := CrystGroupsCatalogue[dim];

    # Check the crystal system parameter.
    if not IsInt( sys ) or sys < 1 or Length( CR.nullQClass ) <= sys then
        Error( "system parameter out of range" );
    fi;

    qnum := CR.nullQClass[sys+1] - CR.nullQClass[sys];

    text := CR_TextStrings.crystalSystem;

    # Print the crystal system number.
    Print( text[1], sys );

    # Print the number of Q-classes in the given crystal system.
    if qnum = 1 then
        Print( text[6], qnum, text[2] );
    else
        Print( text[6], qnum, text[3] );
    fi;

    # Print the holohedry.
    Print( text[4], dim, text[5], sys, text[5], qnum, text[7] );
    Print( "\n" );

end;


#############################################################################
##
#F  DadeGroup( <dim>, <n> ) . . . . . . . . . . . . . . . . . . .  Dade group
##
##  'DadeGroup'  returns the n-th Dade group of dimension dim.
##
DadeGroup := function ( dim, n )

    local CR, G, param;

    # Check the dimension parameter.
    if not IsInt( dim ) or dim < 2 or 4 < dim then
        Error( "dimension out of range (must be 2, 3, or 4)" );
    fi;
    CR := CrystGroupsCatalogue[dim];

    # Check the given Dade group number for being in range.
    if not IsInt( n ) or n < 1 or Length( CR.parametersDadeGroup ) < n then
        Error( "Dade group number out of range" );
    fi;

    param := CR.parametersDadeGroup[n];
    G := CR_MatGroupZClass( param );

    return G;
end;


#############################################################################
##
#F  DadeGroupNumbersZClass( <dim>, <system>, <qclass>, <zclass> )  . . . Dade
#F  DadeGroupNumbersZClass( <dim>, <IT number> ) . . . . . . . . . . .  group
#F  DadeGroupNumbersZClass( <Hermann-Mauguin symbol> ) . . . . . . .  numbers
##
##  'DadeGroupNumbersZClass'  returns  a list  of the  numbers of  those Dade
##  groups which contain groups from the given Z-class.
##
DadeGroupNumbersZClass := function ( arg )

    local CR, dim, i, n1, n2, nums, param, z;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 4 );
    dim := param[1];
    CR := CrystGroupsCatalogue[dim];
    z := CR.nullZClass[ CR.nullQClass[param[2]] + param[3] ] + param[4];

    # Construct the list and return it.
    n1 := CR.nullDadeGroupsZClass[z] + 1;
    n2 := CR.nullDadeGroupsZClass[z+1];
    nums := List( [ n1 .. n2 ],
        i -> RemInt( CR.codedDadeGroupsZClass[i], 10 ) );

    return Set( nums );

end;


#############################################################################
##
#F  DisplayQClass( <dim>, <system>, <qclass> )  . . . . . . . . . . . display
#F  DisplayQClass( <dim>, <IT number> ) . . . . . . . . . . . .  some Q-class
#F  DisplayQClass( <Hermann-Mauguin symbol> ) . . . . . . . . . .  invariants
##
##  'DisplayQClass'   displays   for  the  specified  Q-class  the  following
##  information:
##  - the size of the groups in the Q-class,
##  - the isomorphism type of the groups in the Q-class,
##  - the Hurley pattern,
##  - the rational constituents,
##  - the number of Z-classes in the Q-class, and
##  - the number of space-group types in the Q-class.
##
DisplayQClass := function ( arg )

    local param;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 3 );

    # Display some invariants of the given Q-class.
    CR_DisplayQClass( param );

end;


#############################################################################
##
#F  DisplaySpaceGroupGenerators( <dim>, <system>,<qclass>,<zclass>,<sgtype> )
#F  DisplaySpaceGroupGenerators( <dim>, <IT number> ) . . display space group
#F  DisplaySpaceGroupGenerators( <Hermann-Mauguin symbol> ) . . .  generators
##
##  'DisplaySpaceGroupGenerators'  displays the non-translation generators of
##  the space group specified by the given parameters.
##
DisplaySpaceGroupGenerators := function ( arg )

    local param;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 5 );

    # Display the non-translation generators of the space group type
    # representative matrix group.
    CR_DisplaySpaceGroupGenerators( param );

end;


#############################################################################
##
#F  DisplaySpaceGroupType( <dim>, <system>, <qclass>, <zclass>, <sgtype> )  .
#F  DisplaySpaceGroupType( <dim>, <IT number> ) . . . . .  display some space
#F  DisplaySpaceGroupType( <Hermann-Mauguin symbol> ) . . .  group invariants
##
##  'DisplaySpaceGroupType'  displays for the  specified space-group type the
##  following information:
##  - the orbit size associated with the space-group type,
##  - the IT number (only in case dim = 2 or dim = 3), and
##  - the Hermann-Mauguin symbol (only in case dim = 2 or dim = 3).
##
DisplaySpaceGroupType := function ( arg )

    local param;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 5 );

    # Display some invariants of the given space-group type.
    CR_DisplaySpaceGroupType( param );

end;


#############################################################################
##
#F  DisplayZClass( <dim>, <system>, <qclass>, <zclass> ) . . . . . .  display
#F  DisplayZClass( <dim>, <IT number> )  . . . . . . . . . . . . some Z-class
#F  DisplayZClass( <Hermann-Mauguin symbol> ) . . . . .. . . . . . invariants
##
##  'DisplayZClass'   displays   for  the  specified  Z-class  the  following
##  information:
##  - the Hermann-Mauguin symbol  of a representative space-group type  which
##    belongs to the Z-class (only in case dim = 2 or dim = 3),
##  - the Bravais type,
##  - some decomposability information,
##  - the number of space-group types belonging to the Z-class, and
##  - the size of the associated cohomology group.
##
DisplayZClass := function ( arg )

    local param;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 4 );

    # Display some invariants of the given Z-class.
    CR_DisplayZClass( param );

end;


#############################################################################
##
#F  FpGroupQClass( <dim>, <system>, <qclass> ) . . . . . . . . . . .  Q-class
#F  FpGroupQClass( <dim>, <IT number> ) . . . . . . . . . . .  representative
#F  FpGroupQClass( <Hermann-Mauguin symbol> ) . . . . . . . . . as f.p. group
##
##  'FpGroupQClass'  returns a  f. p. group  isomorphic to the groups  in the
##  specified Q-class.
##
FpGroupQClass := function ( arg )

    local F, param;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 3 );

    # Construct the the corresponding f.p. group.
    F := CR_FpGroupQClass( param );

    return F;
end;


#############################################################################
##
#F  MatGroupZClass( <dim>, <system>, <qclass>, <zclass> ) . . . . . . Z-class
#F  MatGroupZClass( <dim>, <IT number> )  . . . . . . . . . .  representative
#F  MatGroupZClass( <Hermann-Mauguin symbol> )  . . . . . . . as matrix group
##
##  'MatGroupZClass' returns a representative group of the specified Z-class.
##  The generators  of the resulting matrix group  are chosen such  that they
##  satisfy   the    defining   relators    which   are   returned   by   the
##  'FpGroupQClass'  function  for the  representative  of the  corresponding
##  Q-class.
##
MatGroupZClass := function ( arg )

    local G, param;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 4 );

    # Construct the class representative matrix group.
    G := CR_MatGroupZClass( param );

    return G;
end;


#############################################################################
##
#F  NormalizerZClass( <dim>, <system>, <qclass>, <zclass> ) . . .  normalizer
#F  NormalizerZClass( <dim>, <IT number> ) . . . . . . . . . . . of a Z-class
#F  NormalizerZClass( <Hermann-Mauguin symbol> ) . . . . representative group
##
##  'NormalizerZClass'  returns the normalizer in GL(dim,Z)  of the specified
##  Z-class representative matrix group.  If the  order of the  normalizer is
##  finite,  then the  group record components  "crZClass" and "crConjugator"
##  will be set properly.
##
NormalizerZClass := function ( arg )

    local N, param;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 4 );

    # Construct the normalizer in GL(dim,Z) of the class representative
    # matrix group.
    N := CR_NormalizerZClass( param );

    return N;
end;


#############################################################################
##
#F  NrCrystalFamilies( <dim> ) . . . . . . . . . . number of crystal families
##
##  'NrCrystalFamilies'  returns the  number of crystal families of the given
##  dimension.
##
NrCrystalFamilies := function ( dim )

    # Check the dimension parameter.
    if not IsInt( dim ) or dim < 2 or 4 < dim then
        Error( "dimension out of range (must be 2, 3, or 4)" );
    fi;

    return Length( CrystGroupsCatalogue[dim].nameCrystalFamily );
end;


#############################################################################
##
#F  NrCrystalSystems( <dim> ) . . . . . . . . . . . number of crystal systems
##
##  'NrCrystalSystems'  returns  the number  of crystal systems  of the given
##  dimension.
##
NrCrystalSystems := function ( dim )

    # Check the dimension parameter.
    if not IsInt( dim ) or dim < 2 or 4 < dim then
        Error( "dimension out of range (must be 2, 3, or 4)" );
    fi;

    return Length( CrystGroupsCatalogue[dim].familyCrystalSystem );
end;


#############################################################################
##
#F  NrDadeGroups( <dim> ) . . . . . . . . . . . . . . . number of Dade groups
##
##  'NrDadeGroups'  returns the number of Dade groups of the given dimension.
##
NrDadeGroups := function ( dim )

    # Check the dimension parameter.
    if not IsInt( dim ) or dim < 2 or 4 < dim then
        Error( "dimension out of range (must be 2, 3, or 4)" );
    fi;

    return Length( CrystGroupsCatalogue[dim].parametersDadeGroup );
end;


#############################################################################
##
#F  NrQClassesCrystalSystem( <dim>, <system> ) . . . . .  number of Q-classes
##
##  'NrQClassesCrystalSystem'  returns the  number of Q-classes  in the given
##  crystal system.
##
NrQClassesCrystalSystem := function ( dim, sys )

    local CR;

    # Check the dimension parameter.
    if not IsInt( dim ) or dim < 2 or 4 < dim then
        Error( "dimension out of range (must be 2, 3, or 4)" );
    fi;
    CR := CrystGroupsCatalogue[dim];

    # Check the crystal system parameter.
    if not IsInt( sys ) or sys < 1 or Length( CR.nullQClass ) <= sys then
        Error( "system parameter out of range" );
    fi;

    return CR.nullQClass[sys+1] - CR.nullQClass[sys];
end;


#############################################################################
##
#F  NrSpaceGroupTypesZClass( <dim>, <system>, <qclass>, <zclass> ) . . number
#F  NrSpaceGroupTypesZClass( <dim>, <IT number> ) . . . . . .  of space-group
#F  NrSpaceGroupTypesZClass( <Hermann-Mauguin symbol> ) . .  types in Z-class
##
##  'NrSpaceGroupTypesZClass'  returns the number of space-group types in the
##  given Z-class.
##
NrSpaceGroupTypesZClass := function ( arg )

    local CR, param, z;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 4 );
    CR := CrystGroupsCatalogue[param[1]];
    z := CR.nullZClass[ CR.nullQClass[param[2]] + param[3] ] + param[4];

    return CR.nullSpaceGroup[z+1] - CR.nullSpaceGroup[z];
end;


#############################################################################
##
#F  NrZClassesQClass( <dim>, <system>, <qclass> )  . . . . . . . .  number of
#F  NrZClassesQClass( <dim>, <IT number> ) . . . . . . . . . . . .  Z-classes
#F  NrZClassesQClass( <Hermann-Mauguin symbol> ) . . . . . . . . . in Q-class
##
##  'NrZClassesQClass'  returns the number of Z-classes in the given Q-class.
##
NrZClassesQClass := function ( arg )

    local CR, param, q;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 3 );
    CR := CrystGroupsCatalogue[param[1]];
    q := CR.nullQClass[param[2]] + param[3];

    return CR.nullZClass[q+1] - CR.nullZClass[q];
end;


#############################################################################
##
#F  SpaceGroup( <dim>, <system>, <qclass>, <zclass>, <sgtype> ) . space group
#F  SpaceGroup( <dim>, <IT number> )  . . . . . . . . . . . . . . . . . . . .
#F  SpaceGroup( <Hermann-Mauguin symbol> )  . . . . . . . . . . . . . . . . .
##
##  'SpaceGroup'  returns a  representative matrix group (of dimension dim+1)
##  of the specified space-group type.
##
SpaceGroup := function ( arg )

    local G, param;

    # Evaluate the given arguments.
    param := CR_Parameters( arg, 5 );

    # Construct the space group.
    G := CR_SpaceGroup( param );

    return G;
end;


#############################################################################
##
#F  TransposedSpaceGroup( <dim>, <system>, <qclass>, <zclass>, <sgtype> ) . .
#F  TransposedSpaceGroup( <dim>, <IT number> )  . . . . . . . . . . . . . . .
#F  TransposedSpaceGroup( <Hermann-Mauguin symbol> )  . . . . . . . . . . . .
#F  TransposedSpaceGroup( S ) . . . . . . . . . . . .  transposed space group
##
##  'TransposedSpaceGroup'  returns the transposed matrix group  of the given
##  or specified space group.
##
##  The reason is the following. Each space group is presented in the form of
##  a group of augmented matrices (of dimension dim+1) of the following form:
##
##          [  M  | t ]          
##          [-----+---]          Here, M is the `linear part' and
##          [  0  | 1 ]          t is the `translational part'.
##
##  Therefore,  the natural action of a space group in this form  is from the
##  left.  This collides with the convention in GAP  to have all actions from
##  the right. This function does the necessary conversions. In fact, it does
##  not only transpose the matrices, but it also adapts the relators given in
##  S.fpGroup to the new generators.
##
TransposedSpaceGroup := function( arg )
    
    local G, narg, param, rel, S, T;

    # Evaluate the arguments.
    narg := Length( arg );
    if narg = 1 and IsRec( arg[1] ) and IsBound( arg[1].crSpaceGroupType )
    then
        # The argument is the space group S to be transposed.
        # Get a copy G of the finitely presented group involved in S.
        S := arg[1];
        param := S.crSpaceGroupType;
        G := FreeGroup( S.fpGroup.namesGenerators );
        G.relators := List( S.fpGroup.relators, rel ->
            MappedWord( rel, S.fpGroup.generators, G.generators ) );
    else
        # Construct the space group S to be transposed from the arguments
        # and get the finitely presented group G involved in S.
        param := CR_Parameters( arg, 5 );
        S := CR_SpaceGroup( param );
        G := S.fpGroup;
    fi;
    
    # Get the group T generated by the transposed generators of S.
    T := Group( List( S.generators, TransposedMat ), Copy( S.identity ) );
    T.crTransposedSpaceGroupTyp := param;

    # The above component name contains a typo.  Instead of just fixing it
    # we add a component with the corredct name for backwards
    # compatibility. 
    T.crTransposedSpaceGroupType := param;

    T.name := CR_Name( "TransposedSpaceGroup", param, 5 );
    T.size := S.size;
    
    # Reverse each relator in the presentation of G and store G in the
    # group record of T.
    G.relators := List( G.relators,
        rel -> Product( Reversed( List( rel ) ) ) ); 
    T.fpGroup := G;
    
    # Return the transposed group.
    return T;
end;


#############################################################################
##
#F  ZClassRepsDadeGroup( <dim>, <system>, <qclass>, <zclass>, <n> ) . . . . .
#F  ZClassRepsDadeGroup( <dim>, <IT number>, <n> ) . . . . . . . Z-class reps
#F  ZClassRepsDadeGroup( <Hermann-Mauguin symbol>, <n> ) . . .  in Dade group
##
##  'ZClassRepsDadeGroup'  returns  a   list  of  representatives   of  those
##  conjugacy classes  of subgroups of the given Dade group  which consist of
##  groups belonging to the given Z-class.
##
ZClassRepsDadeGroup := function ( arg )

    local CR, d, dim, nargs, param, reps;

    # Check the number of arguments;
    nargs := Length( arg );
    if nargs < 2 then
        Error( "illegal number of arguments" );
    fi;

    # Evaluate the given Z-class arguments.
    param := CR_Parameters( Sublist( arg, [ 1 .. nargs - 1 ] ), 4 );

    # Check the Dade group argument;
    d := arg[nargs];
    dim := param[1];
    CR := CrystGroupsCatalogue[dim];
    if not IsInt( d ) or d < 1 or Length( CR.parametersDadeGroup ) < d then
        Error( "Dade group parameter out of range" );
    fi;

    # Construct the list of representative Z-class groups.
    reps := CR_ZClassRepsDadeGroup( param, d );

    return reps;
end;


#############################################################################
##
#F  CR_InitializeRelators( <CR catalogue> )  . . . . . initialize CR relators
##
##  'CR_InitializeRelators'   initializes  the  relator  words  list  of  the
##  crystallographic goups catalogue.
##
CR_InitializeRelators := function ( CR )

    local a, b, c, d, e, f, g, gens, rels;

    # Define the abstract generators.
    a := AbstractGenerator( "a" );
    b := AbstractGenerator( "b" );
    c := AbstractGenerator( "c" );
    d := AbstractGenerator( "d" );
    e := AbstractGenerator( "e" );
    f := AbstractGenerator( "f" );
    g := AbstractGenerator( "g" );

    gens := [ g, f, e, d, c, b, a ];

    # Define the relator words.
    rels := [ a, a^2, a^3, a^4, a^5, a^6, a^8, a^10, a^12, b^2, b^2/a,
      b^2/a^2, b^2/a^3, b^2/a^6, b^2/a^9, b^3, b^4, b^5, b^6, b^10, b^12,
      c^2, c^2/a^6, c^3, c^4, c^6, c^6/a^2, d^2, d^4, d^5, d^6, d^6/b^2,
      d^10, e^2, e^3, e^6, f^2, f^6, g^2, Comm(a,b), Comm(a,b)/a,
      Comm(a,b)/a^2, Comm(a,b)/a^3, Comm(a,b)/a^4, Comm(a,b)/a^6,
      Comm(a,b)/a^8, Comm(a,b)/a^10, Comm(a,b)/b^4, Comm(a,b)/b^8,
      Comm(a,b^2)/b^3, Comm(a,b^2)/b^6, Comm(a,b^3)/b^2, Comm(a,b^3)/b^4,
      Comm(a,b^4)/b, Comm(a,b^4)/b^2, Comm(a,b^5), Comm(a,b^6)/b^8,
      Comm(a,b^7)/b^6, Comm(a,b^8)/b^4, Comm(a,b^9)/b^2, Comm(a,c),
      Comm(a,c)/(b*a), Comm(a,c)/(b*a^2), Comm(a,c)/(b*a^4),
      Comm(a,c)/(b*a^6), Comm(a,c)/(b^2*a), Comm(a,c)/(b^2*a^2),
      Comm(a,c)/(b^5*a^2), Comm(a,c)/(b^5*a^5), Comm(a,c)/(b^8*a^2),
      Comm(a,c)/(c^3*b^3*a), Comm(a,c)/(c^5*b*a), Comm(a,c)/a, Comm(a,c)/a^2,
      Comm(a,c)/a^4, Comm(a,c)/a^6, Comm(a,c)/a^10, Comm(a,c)/b,
      Comm(a,c)/b^2, Comm(a,c^2)/(b*a), Comm(a,c^2)/(b^2*a^2),
      Comm(a,c^2)/(c^3*b^2*a^3), Comm(a,c^2)/(c^5*b^2*a^3),
      Comm(a,c^3)/(c^5*a), Comm(a,c^3)/(c^5*b^4*a^3), Comm(a,c^4)/(c*b*a^3),
      Comm(a,c^4)/(c*b^2*a^3), Comm(a,c^4)/(c^3*b^2*a^3),
      Comm(a,c^5)/(b*a^2), Comm(a,c^5)/(c*b^3*a^3), Comm(a,c^5)/(c^4*b^6),
      Comm(a,d), Comm(a,d)/(b*a), Comm(a,d)/(b*a^4), Comm(a,d)/(c*a),
      Comm(a,d)/(c*b*a), Comm(a,d)/(c*b*a^2), Comm(a,d)/(c*b^2*a),
      Comm(a,d)/(c*b^3), Comm(a,d)/(d^2*c*b*a), Comm(a,d)/a, Comm(a,d)/a^2,
      Comm(a,d)/a^10, Comm(a,d)/b, Comm(a,d)/b^2, Comm(a,d^2)/(d^3*b*a),
      Comm(a,d^2)/(d^8*b*a), Comm(a,d^3)/(d^2*b*a), Comm(a,d^4)/(d^3*c),
      Comm(a,d^4)/(d^8*c), Comm(a,d^5), Comm(a,d^6)/(d^2*c*b*a),
      Comm(a,d^7)/(d^8*b*a), Comm(a,d^8)/(d^2*b*a), Comm(a,d^9)/(d^8*c),
      Comm(a,e), Comm(a,e)/(c*b*a), Comm(a,e)/(d*b*a), Comm(a,e)/(d*b*a^2),
      Comm(a,e)/(d*c*a), Comm(a,e)/(d^3*c*b^2*a), Comm(a,e)/d^3, Comm(a,f),
      Comm(a,f)/(c*a), Comm(a,f)/(d*c*a), Comm(a,f)/a^2, Comm(a,f)/b,
      Comm(a,g), Comm(b,c), Comm(b,c)/(b*a), Comm(b,c)/(b*a^2),
      Comm(b,c)/(b*a^3), Comm(b,c)/(b^2*a), Comm(b,c)/(b^2*a^2),
      Comm(b,c)/(b^2*a^4), Comm(b,c)/(b^4*a), Comm(b,c)/(b^4*a^2),
      Comm(b,c)/(b^5*a), Comm(b,c)/(c^3*b^2*a), Comm(b,c)/(c^4*b*a^2),
      Comm(b,c)/(c^4*b^4*a^2), Comm(b,c)/a, Comm(b,c)/a^2, Comm(b,c)/a^3,
      Comm(b,c)/a^4, Comm(b,c)/b, Comm(b,c)/b^2, Comm(b,c)/b^4,
      Comm(b,c)/b^10, Comm(b,c^2)/(c*a), Comm(b,c^2)/(c^3*b^2*a^3),
      Comm(b,c^2)/(c^3*b^8*a), Comm(b,c^2)/a, Comm(b,c^3)/(c^2*b^2*a^2),
      Comm(b,c^3)/(c^4*b^2*a^2), Comm(b,c^3)/(c^4*b^4*a^2),
      Comm(b,c^4)/(c^3*b^3*a^3), Comm(b,c^4)/(c^5*a^3),
      Comm(b,c^4)/(c^5*b^3*a), Comm(b,c^5)/(c^2*b^4*a^2),
      Comm(b,c^5)/(c^3*a), Comm(b,c^5)/(c^3*b^2*a^3), Comm(b,d),
      Comm(b,d)/(b*a), Comm(b,d)/(c*a), Comm(b,d)/(c*b*a),
      Comm(b,d)/(c*b^3*a), Comm(b,d)/a, Comm(b,d)/a^2, Comm(b,d)/a^3,
      Comm(b,d)/a^9, Comm(b,d)/b^2, Comm(b,d)/b^4, Comm(b,d)/c,
      Comm(b,d)/d^2, Comm(b,d^2)/d^4, Comm(b,d^3)/d, Comm(b,d^3)/d^6,
      Comm(b,d^4)/d^3, Comm(b,d^4)/d^8, Comm(b,d^5), Comm(b,d^6)/d^2,
      Comm(b,d^7)/d^4, Comm(b,d^8)/d^6, Comm(b,d^9)/d^8, Comm(b,e),
      Comm(b,e)/(c*b*a), Comm(b,e)/(c*b^2*a), Comm(b,e)/(d*b^2*a),
      Comm(b,e)/(d*c*b^2), Comm(b,e)/a, Comm(b,e)/b^2, Comm(b,f),
      Comm(b,f)/(d*c*b*a), Comm(b,f)/(d*c*b^2), Comm(b,f)/b^2, Comm(b,g)/a,
      Comm(c,d), Comm(c,d)/(b*a), Comm(c,d)/(b*a^2), Comm(c,d)/(c*b),
      Comm(c,d)/(c*b*a), Comm(c,d)/(c*b*a^2), Comm(c,d)/(c*b*a^3),
      Comm(c,d)/(c*b^2*a), Comm(c,d)/(c^2*b*a^3), Comm(c,d)/(c^2*b^3),
      Comm(c,d)/(c^4*b), Comm(c,d)/(c^4*b*a), Comm(c,d)/(d^3*a),
      Comm(c,d)/(d^8*a), Comm(c,d)/b, Comm(c,d)/b^2, Comm(c,d)/c,
      Comm(c,d)/c^2, Comm(c,d)/c^4, Comm(c,d^2)/(d*c*a),
      Comm(c,d^2)/(d^6*c*a), Comm(c,d^3)/(c*a), Comm(c,d^4)/(d^3*c^2*a),
      Comm(c,d^4)/(d^8*c^2*a), Comm(c,d^5), Comm(c,d^6)/(d^8*a),
      Comm(c,d^7)/(d^6*c*a), Comm(c,d^8)/(c*a), Comm(c,d^9)/(d^8*c^2*a),
      Comm(c,e), Comm(c,e)/(b*a), Comm(c,e)/(d*a^2), Comm(c,e)/(d*b^2),
      Comm(c,e)/(d*c*b^3), Comm(c,e)/(d^3*b), Comm(c,e)/b^3, Comm(c,e)/d^3,
      Comm(c,f), Comm(c,f)/(c*a), Comm(c,f)/(d*c*b^3), Comm(c,f)/b,
      Comm(c,f)/b^3, Comm(c,g)/(d^3*c*b^3), Comm(d,e)/(c*b^3*a),
      Comm(d,e)/(d*c*a^2), Comm(d,e)/(d*c*b*a), Comm(d,e)/(d*c*b^2),
      Comm(d,e)/(d^3*b^3*a), Comm(d,e)/(d^3*c*b), Comm(d,e)/(d^4*c),
      Comm(d,e)/(d^4*c*b*a), Comm(d,e), Comm(d,f)/(c*b*a),
      Comm(d,f)/(d*c*b*a), Comm(d,f)/(d^4*c*b), Comm(d,f)/a^3, Comm(d,f)/c,
      Comm(d,g)/(e*d^5*c*b^3*a), Comm(e,f)/(e*b), Comm(e,f)/(e*c*a^3),
      Comm(e,f)/(e*d*c*a^2), Comm(e,f)/(e^4*c*b^3*a), Comm(e,f)/e,
      Comm(e,g)/(e^2*d^4*c*b^2*a), Comm(f,g)];

    CR[2].generatorsQClass := gens;
    CR[3].generatorsQClass := gens;
    CR[4].generatorsQClass := gens;

    CR[2].relatorWordsQClass := rels;
    CR[3].relatorWordsQClass := rels;
    CR[4].relatorWordsQClass := rels;

end;

CR_InitializeRelators( CrystGroupsCatalogue );

